app/models/event.rb
class Event < ActiveRecord::Base
include WithoutTimestamp
include Ensures
acts_as_paranoid
validates :link, presence: true, length: {maximum: 200}
validates :text, presence: true, length: {maximum: 200}
validates :happens_at, presence: true
validates :user_group, presence: true
belongs_to :user_group
scope :oldest_first, -> { order happens_at: :asc }
scope :newest_first, -> { order happens_at: :desc }
ensure_link :link
def save_without_timestamps
without_timestamps do
save
end
end
class << self
def upcoming(after = Time.now)
oldest_first.where arel_table[:happens_at].gteq(after)
end
def finished(since = Time.now)
newest_first.where arel_table[:happens_at].lt(since)
end
def since_beginning_of_month(start = Time.now)
oldest_first.where arel_table[:happens_at].gteq(start.beginning_of_month)
end
def for_user_group(user_group_id)
if user_group_id.is_a? UserGroup
id = user_group_id.id
else
id = user_group_id
id = id.to_i if id
end
if id && id != 0
where(user_group_id: id)
else
all
end
end
def approved
joins(user_group: :users).where(users:{approved:true}).uniq
end
def per_day events
events.to_a.group_by { |event| event.happens_at }
end
end
def self.page(page, per_page)
if page >= 0
upcoming.offset page * per_page
else
finished.offset((-page-1) * per_page)
end.limit(per_page)
end
end