Class: Crowdblog::Post

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/crowdblog/post.rb

Constant Summary collapse

LEGACY_TITLE_REGEXP =
/(\d+-\d+-\d+)-(.*)/

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#transitionObject

Returns the value of attribute transition.



14
15
16
# File 'app/models/crowdblog/post.rb', line 14

def transition
  @transition
end

Class Method Details

.all_posts_jsonObject



67
68
69
70
71
# File 'app/models/crowdblog/post.rb', line 67

def all_posts_json
  includes(:author).
      order_by_publish_date.to_json only: [:id, :title, :state, :published_at, :ready_for_review],
                                methods: [:author_email, :published?]
end

.by_author(author_id) ⇒ Object



73
74
75
# File 'app/models/crowdblog/post.rb', line 73

def by_author(author_id)
  published_and_ordered.where(author_id: author_id)
end

.for_admin_indexObject



97
98
99
# File 'app/models/crowdblog/post.rb', line 97

def for_admin_index
  ordered_by_state.order_by_publish_date
end

.last_published(number) ⇒ Object



77
78
79
# File 'app/models/crowdblog/post.rb', line 77

def last_published(number)
  published_and_ordered.limit(number)
end

.order_by_publish_dateObject



81
82
83
# File 'app/models/crowdblog/post.rb', line 81

def order_by_publish_date
  order('published_at DESC, created_at DESC, id DESC')
end

.ordered_by_stateObject



101
102
103
# File 'app/models/crowdblog/post.rb', line 101

def ordered_by_state
  order(:state)
end

.publishedObject



85
86
87
# File 'app/models/crowdblog/post.rb', line 85

def published
  where(state: 'published')
end

.published_and_orderedObject



89
90
91
# File 'app/models/crowdblog/post.rb', line 89

def published_and_ordered
  published.order_by_publish_date
end

.scoped_for(user) ⇒ Object



93
94
95
# File 'app/models/crowdblog/post.rb', line 93

def scoped_for(user)
  user.is_publisher? ? scoped : user.authored_posts
end

Instance Method Details

#allowed_to_update_permalink?Boolean

INSTANCE METHODS

Returns:

  • (Boolean)


113
114
115
# File 'app/models/crowdblog/post.rb', line 113

def allowed_to_update_permalink?
  !self.published?
end

#dayObject



117
118
119
# File 'app/models/crowdblog/post.rb', line 117

def day
  "%02d" % published_at.day
end

#formatted_published_dateObject



121
122
123
# File 'app/models/crowdblog/post.rb', line 121

def formatted_published_date
  published_at.strftime("%b %d, %Y")
end

#html_bodyObject



125
126
127
128
129
# File 'app/models/crowdblog/post.rb', line 125

def html_body
  @@renderer ||= Redcarpet::Markdown.new(Redcarpet::Render::HTML,
                                         :autolink => true, :space_after_headers => true)
  @@renderer.render(self.body).html_safe
end

#legacy(string, email) ⇒ Object



131
132
133
134
135
136
137
138
139
# File 'app/models/crowdblog/post.rb', line 131

def legacy(string, email)
  string =~ LEGACY_TITLE_REGEXP
  self.published_at = $1
  user = User.find_by_email(email) || User.create!(email: email)
  self.author = user
  self.save
  self.publish
  self.update_attribute(:permalink, $2)
end

#monthObject



141
142
143
# File 'app/models/crowdblog/post.rb', line 141

def month
  "%02d" % published_at.month
end

#publish_if_allowed(transition, user) ⇒ Object



145
146
147
148
149
150
# File 'app/models/crowdblog/post.rb', line 145

def publish_if_allowed(transition, user)
  if user.is_publisher?
    self.publisher = user
    self.send(transition)
  end
end


152
153
154
# File 'app/models/crowdblog/post.rb', line 152

def regenerate_permalink
  self.permalink = title.parameterize
end

#url_paramsObject

Use this methods to generate the post url always use with the splat operator

Example:

post_url(*post.url_params)


164
165
166
# File 'app/models/crowdblog/post.rb', line 164

def url_params
  [self.year, self.month, self.day, self.permalink, 'html']
end