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



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

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



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

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

.for_admin_indexObject



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

def for_admin_index
  ordered_by_state.order_by_publish_date
end

.last_published(number) ⇒ Object



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

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

.order_by_publish_dateObject



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

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

.ordered_by_stateObject



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

def ordered_by_state
  order(:state)
end

.publishedObject



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

def published
  where(state: 'published')
end

.published_and_orderedObject



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

def published_and_ordered
  published.order_by_publish_date
end

.scoped_for(user) ⇒ Object



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

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

Instance Method Details

#allowed_to_update_permalink?Boolean

INSTANCE METHODS

Returns:

  • (Boolean)


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

def allowed_to_update_permalink?
  !self.published?
end

#dayObject



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

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

#formatted_published_dateObject



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

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

#html_bodyObject



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

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

#monthObject



130
131
132
# File 'app/models/crowdblog/post.rb', line 130

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

#publish_if_allowed(transition, user) ⇒ Object



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

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


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

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)


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

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