Class: BlogPost

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Entity, Lockable, Postable
Defined in:
app/models/blog_post.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#for_previewObject

Returns the value of attribute for_preview.



11
12
13
# File 'app/models/blog_post.rb', line 11

def for_preview
  @for_preview
end

Class Method Details

.all_columnsObject



146
147
148
# File 'app/models/blog_post.rb', line 146

def all_columns
  select "blog_posts.*"
end

.archives(preview = false) ⇒ Object



188
189
190
191
192
# File 'app/models/blog_post.rb', line 188

def archives(preview = false)
  context = BlogPost
  context = posted unless preview
  context.reverse_chronological.select([:url_title, :title, :posted_at]).to_a
end

.create_post(current_user, params) ⇒ Object



111
112
113
114
# File 'app/models/blog_post.rb', line 111

def create_post(current_user, params)
  url_title = url_titlize params[:title]
  create :title => params[:title], :url_title => url_title, :content => params[:content], :author => current_user.name, :locked => true
end

.currentObject



150
151
152
153
154
# File 'app/models/blog_post.rb', line 150

def current
  post = posted.reverse_chronological.first
  post = new :title => "No Posts Yet", :content => "There are no blog posts yet." unless post
  post
end

.feedObject



194
195
196
# File 'app/models/blog_post.rb', line 194

def feed
  posted.reverse_chronological.take 10
end

.first_postObject



142
143
144
# File 'app/models/blog_post.rb', line 142

def first_post
  posted.chronological.first || new(:title => "No Posts Yet", :content => "There are no blog posts yet.")
end

.from_url_title(url_title) ⇒ Object

Raises:



175
176
177
178
179
# File 'app/models/blog_post.rb', line 175

def from_url_title(url_title)
  post = posted.where(:url_title => url_title).first
  raise ActiveRecord::RecordNotFound.new("No records found!") unless post
  post
end

.newest_postObject



138
139
140
# File 'app/models/blog_post.rb', line 138

def newest_post
  posted.reverse_chronological.first || new(:title => "No Posts Yet", :content => "There are no blog posts yet.")
end

.newest_preview_postObject



134
135
136
# File 'app/models/blog_post.rb', line 134

def newest_preview_post
  reverse_chronological.first || new(:title => "No Posts Yet", :content => "There are no blog posts yet.")
end

.next_post(post) ⇒ Object



169
170
171
172
173
# File 'app/models/blog_post.rb', line 169

def next_post(post)
  context = BlogPost
  context = posted unless post.for_preview
  context.where("blog_posts.posted_at > ?", post.posted_at).chronological.first
end

.preview_currentObject



156
157
158
159
160
161
# File 'app/models/blog_post.rb', line 156

def preview_current
  post = reverse_chronological.first
  post = new :title => "No Posts Yet", :content => "There are no blog posts yet." unless post
  post.for_preview = true
  post
end

.preview_from_url_title(url_title) ⇒ Object

Raises:



181
182
183
184
185
186
# File 'app/models/blog_post.rb', line 181

def preview_from_url_title(url_title)
  post = where(:url_title => url_title).first
  raise ActiveRecord::RecordNotFound.new("No records found!") unless post
  post.for_preview = true
  post
end

.previous_post(post) ⇒ Object



163
164
165
166
167
# File 'app/models/blog_post.rb', line 163

def previous_post(post)
  context = BlogPost
  context = posted unless post.for_preview
  context.where("blog_posts.posted_at < ?", post.posted_at).reverse_chronological.first
end

.search(query) ⇒ Object



107
108
109
# File 'app/models/blog_post.rb', line 107

def search(query)
  reverse_chronological.where "LOWER(title) LIKE :query OR LOWER(url_title) LIKE :query OR LOWER(content) LIKE :query OR LOWER(author) LIKE :query", :query => "%#{query.downcase}%"
end

.sitemapObject



198
199
200
# File 'app/models/blog_post.rb', line 198

def sitemap
  posted.reverse_chronological.to_a
end

.update_post(params) ⇒ Object



116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'app/models/blog_post.rb', line 116

def update_post(params)
  post = find params[:id].to_i
  post.ensure_unlocked!
  original_url_title = post.url_title
  post.title = params[:title]
  post.url_title = url_titlize params[:title]
  post.author = params[:author]
  post.content = params[:content]
  post.locked = true
  post.post_from params
  post.save!
  post
end

.url_titlize(title) ⇒ Object



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

def url_titlize(title)
  title.downcase.gsub(" ", "-").gsub(/[^-_a-z0-9]/, "")
end

Instance Method Details

#edit_urlObject



27
28
29
# File 'app/models/blog_post.rb', line 27

def edit_url
  "/admin/blog/#{id}/edit"
end

#first_postObject



31
32
33
34
35
# File 'app/models/blog_post.rb', line 31

def first_post
  return @first_post if @first_post_retrieved
  @first_post_retrieved = true
  @first_post ||= BlogPost.first_post
end

#first_url_titleObject



37
38
39
# File 'app/models/blog_post.rb', line 37

def first_url_title
  first_post.url_title if first_post
end

#newest?Boolean

Returns:



65
66
67
# File 'app/models/blog_post.rb', line 65

def newest?
  id == newest_id
end

#newest_idObject



53
54
55
# File 'app/models/blog_post.rb', line 53

def newest_id
  newest_post.id if newest_post
end

#newest_postObject



41
42
43
44
45
# File 'app/models/blog_post.rb', line 41

def newest_post
  return @newest_post if @newest_post_retrieved
  @newest_post_retrieved = true
  @newest_post ||= BlogPost.newest_post
end

#newest_preview?Boolean

Returns:



69
70
71
# File 'app/models/blog_post.rb', line 69

def newest_preview?
  id == newest_preview_id
end

#newest_preview_idObject



57
58
59
# File 'app/models/blog_post.rb', line 57

def newest_preview_id
  newest_preview_post.id if newest_preview_post
end

#newest_preview_postObject



47
48
49
50
51
# File 'app/models/blog_post.rb', line 47

def newest_preview_post
  return @newest_preview_post if @newest_preview_post_retrieved
  @newest_preview_post_retrieved = true
  @newest_preview_post ||= BlogPost.newest_preview_post
end

#next_postObject



85
86
87
88
89
90
91
92
# File 'app/models/blog_post.rb', line 85

def next_post
  return @next_post if @next_post_retrieved

  if posted_at
    @next_post_retrieved = true
    @next_post ||= BlogPost.next_post(self)
  end
end

#next_url_titleObject



98
99
100
# File 'app/models/blog_post.rb', line 98

def next_url_title
  next_post.url_title if next_post
end

#oldest?Boolean

Returns:



61
62
63
# File 'app/models/blog_post.rb', line 61

def oldest?
  url_title == first_url_title
end

#prev_url_titleObject



94
95
96
# File 'app/models/blog_post.rb', line 94

def prev_url_title
  previous_post.url_title if previous_post
end

#preview_urlObject



23
24
25
# File 'app/models/blog_post.rb', line 23

def preview_url
  "/admin/blog/#{url_title}/preview"
end

#previous_postObject



73
74
75
76
77
78
79
80
81
82
83
# File 'app/models/blog_post.rb', line 73

def previous_post
  return @previous_post if @previous_post_retrieved

  if posted_at
    @previous_post_retrieved = true
    @previous_post ||= BlogPost.previous_post(self)
  elsif for_preview
    @previous_post_retrieved = true
    @previous_post ||= BlogPost.preview_current
  end
end

#real?Boolean

Returns:



102
103
104
# File 'app/models/blog_post.rb', line 102

def real?
  url_title
end

#to_backup_entriesObject



13
14
15
16
17
# File 'app/models/blog_post.rb', line 13

def to_backup_entries
  post = Backup::Entry.new id, url_title, "markdown", content
  meta = Backup::Entry.new id, "#{url_title}.meta", "json", to_json(:except => :content)
  [post, meta]
end

#urlObject



19
20
21
# File 'app/models/blog_post.rb', line 19

def url
  "/blog/#{url_title}"
end