Post 모델 Column 추가 및 Spec 추가

Post Model 
---

<h3>after_create 콜백 메소드 추가</h3>

- factory의 after(:create)을 model의 after_create 콜백 메소드로 교체

*app/models/post.rb*

``` ruby
after_create :set_plaza_post

def set_plaza_post
  self.create_plaza
end
```

<h3>Post Migration 생성</h3>

``` sh
$ rails g migration add_column_to_post published_at:datetime hit:integer
```

<h3>Post Model Column Hit 변경</h3>

*db/migrate/add_column_to_post.rb*

``` ruby
add_column :posts, :hit, :integer, default: 0
```

<h3>Post Model DB Column 업데이트</h3>

``` sh
$ rake db:migrate
$ rake db:test:clone
```

<h3>Post Hit 관련 Spec 추가</h3>

``` ruby
it "> Post 생성시 hit의 기본값은 0이다." do
   expect(build(:post).hit).to eq(0)
end
```

<h3>Post Spec 추가 (published_at 관련)</h3>

*models/post.rb*

- published가 활성화시 현재시간을 넣고, 비활성화시 nil을 넣습니다.

  ``` ruby
  before_save :set_published_at
  private
  def set_published_at
    if (published == true || published == "true" || published == "1") && published_at.nil?
      self.published_at = Time.now
    elsif (published != true && published != "true" && published != "1") && published_at
      self.published_at = nil
    end
  end
  ```

*spec/post_spec.rb*

``` ruby
it "> published가 false일때 published_at은 nil이다." do 
  post = create(:post, published: false)
  expect(post.published_at).to be_nil
end      
it "> published가 true일때 published_at에 Time이 입력된다." do 
  post = create(:post, published: true)
  expect(post.published_at).to be_a_kind_of(Time)
end          
```

<h3>Post Spec 추가 (title, content 관련)</h3>

*models/post.rb*

- title과 content의 최소, 최대 길이 조절

  ``` ruby
  validates :title, presence: true, :length => { :minimum => 3, :maximum => 255 }
  validates :content, presence: true, :length => { :minimum => 0, :maximum => 10000 }
  ```

*spec/factories/posts.rb*

~~- Faker의 characters를 이용하여 title과 content의 길이를 정합니다.
factory :invalid_post_by_min_title do
    title Faker::Lorem.characters(2)
  end
  factory :invalid_post_by_max_title do
    title Faker::Lorem.characters(256)
  end    
  factory :invalid_post_by_max_content do
    content Faker::Lorem.characters(10001)
  end~~  

*spec/models/post_spec.rb*

- Spec에서 확인합니다.

~~it "> Title이 3글자 미만이면 유효하지 않다." do
    expect(build(:invalid_post_by_min_title)).to_not be_valid
  end
  it "> Title이 255자를 초과하면 유효하지 않다." do
    expect(build(:invalid_post_by_max_title)).to_not be_valid      
  end
  it "> Content가 10000자를 초과하면 유효하지 않다." do
    expect(build(:invalid_post_by_max_content)).to_not be_valid      
  end~~
  ``` ruby
    it "> Title이 3글자 이상 255글자 이하이어야 한다." do
      should ensure_length_of(:title).is_at_least(3).is_at_most(255)
    end
    it "> Content가 0글자 이상 10000글자 이하이어야 한다." do
      should ensure_length_of(:content).is_at_least(0).is_at_most(10000)
    end  
  ```