Repository URL to install this package:
Version:
2.1.0 ▾
|
module Articular
module Model
def self.included(base)
base.extend ClassMethods
base.include InstanceMethods
base.include Articular::Navigator
base.include Articular::Archiver
base.extend FriendlyId
base.friendly_id :title, use: :slugged
base.table_name = 'articular_articles'
base.navigate :scope => :published,
:field => :published_at,
:order => "published_at DESC, created_at DESC"
base.archive_fields :single => :published_at,
:scope => :published
base.before_save :trigger_state_transition_callbacks
end
module InstanceMethods
def should_generate_new_friendly_id?
title_changed?
end
private
def date_and_title
[published_at.to_s, title].join(' ')
end
def set_published_at
self.published_at = Date.today if published_at.blank?
end
def trigger_state_transition_callbacks
if 'published' == state
set_published_at
end
end
end
module ClassMethods
def default_scope
newest_first
end
def newest_first
order(["published_at DESC", "created_at DESC"])
end
def oldest_first
order(["published_at ASC", "created_at ASC"])
end
def published
present.where(state: 'published')
end
def drafted
future.or(where(state: 'drafted'))
end
def future
where("published_at > ?", DateTime.now)
end
def present
where("published_at <= ?", DateTime.now)
end
end
end
end