Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist
View blog_post.rb
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
require 'acts-as-taggable-on'
require 'seo_meta'
 
class BlogPost < ActiveRecord::Base
 
is_seo_meta if self.table_exists?
 
default_scope :order => 'published_at DESC'
#.first & .last will be reversed -- consider a with_exclusive_scope on these?
 
belongs_to :author, :class_name => 'User', :foreign_key => :user_id
 
has_many :comments, :class_name => 'BlogComment', :dependent => :destroy
acts_as_taggable
 
has_many :categorizations
has_many :categories, :through => :categorizations, :source => :blog_category
 
acts_as_indexed :fields => [:title, :body]
 
validates :title, :presence => true, :uniqueness => true
validates :body, :presence => true
validates :link_url, :presence => { :message => "must have a link_url if is_link is true" } if :is_link
 
has_friendly_id :friendly_id_source, :use_slug => true,
:default_locale => (::Refinery::I18n.default_frontend_locale rescue :en),
:approximate_ascii => RefinerySetting.find_or_set(:approximate_ascii, false, :scoping => 'blog'),
:strip_non_ascii => RefinerySetting.find_or_set(:strip_non_ascii, false, :scoping => 'blog')
 
attr_accessible :title, :body, :tag_list, :draft, :published_at, :browser_title, :meta_keywords, :meta_description, :user_id, :category_ids, :custom_url, :custom_teaser, :is_link, :link_url
 
scope :by_archive, lambda { |archive_date|
where(['published_at between ? and ?', archive_date.beginning_of_month, archive_date.end_of_month])
}
 
scope :by_year, lambda { |archive_year|
where(['published_at between ? and ?', archive_year.beginning_of_year, archive_year.end_of_year])
}
 
scope :all_previous, lambda { where(['published_at <= ?', Time.now.beginning_of_month]) }
 
scope :live, lambda { where( "published_at <= ? and draft = ?", Time.now, false) }
 
scope :previous, lambda { |i| where(["published_at < ? and draft = ?", i.published_at, false]).limit(1) }
# next is now in << self
 
def next
BlogPost.next(self).first
end
 
def prev
BlogPost.previous(self).first
end
 
def live?
!draft and published_at <= Time.now
end
 
def category_ids=(ids)
self.categories = ids.reject{|id| id.blank?}.collect {|c_id|
BlogCategory.find(c_id.to_i) rescue nil
}.compact
end
 
def friendly_id_source
custom_url.present? ? custom_url : title
end
 
class << self
def next current_record
self.send(:with_exclusive_scope) do
where(["published_at > ? and draft = ?", current_record.published_at, false]).order("published_at ASC")
end
end
 
def comments_allowed?
RefinerySetting.find_or_set(:comments_allowed, true, {
:scoping => 'blog'
})
end
 
def uncategorized
BlogPost.live.reject { |p| p.categories.any? }
end
end
 
module ShareThis
DEFAULT_KEY = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
 
class << self
def key
RefinerySetting.find_or_set(:share_this_key, BlogPost::ShareThis::DEFAULT_KEY, {
:scoping => 'blog'
})
end
 
def enabled?
key = BlogPost::ShareThis.key
key.present? and key != BlogPost::ShareThis::DEFAULT_KEY
end
end
end
 
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.