mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-29 14:01:48 +00:00
44 lines
1.2 KiB
Ruby
44 lines
1.2 KiB
Ruby
|
module ActiveRecord
|
||
|
module Acts
|
||
|
module Readable
|
||
|
def self.included(base)
|
||
|
base.extend ClassMethods
|
||
|
end
|
||
|
|
||
|
module ClassMethods
|
||
|
def acts_as_readable
|
||
|
has_many :readings, :as => :readable
|
||
|
has_many :users_who_read, :through => :readings, :source => :user
|
||
|
|
||
|
include ActiveRecord::Acts::Readable::InstanceMethods
|
||
|
extend ActiveRecord::Acts::Readable::SingletonMethods
|
||
|
end
|
||
|
end
|
||
|
|
||
|
module SingletonMethods
|
||
|
def find_unread_by(user)
|
||
|
find(:all) - find_read_by(user)
|
||
|
end
|
||
|
|
||
|
def find_read_by(user)
|
||
|
find(:all, :conditions => ["readings.readable_id = #{table_name}.id AND readings.user_id=?", user.id], :include => :readings)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
module InstanceMethods
|
||
|
def read_by!(user)
|
||
|
readings << Reading.new(:user_id => user.id)
|
||
|
end
|
||
|
|
||
|
def unread_by!(user)
|
||
|
readings.find(:first, :conditions => ["user_id = ?",user.id])
|
||
|
end
|
||
|
|
||
|
def read_by?(user)
|
||
|
!!users_who_read.find(:first, :conditions => ["user_id = ?",user.id])
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|