module Unread::Readable::InstanceMethods
Public Instance Methods
mark_as_read!(options)
click to toggle source
# File lib/unread/readable.rb, line 128 def mark_as_read!(options) reader = options[:for] self.class.assert_reader(reader) ReadMark.transaction do if unread?(reader) rm = read_mark(reader) || read_marks.build rm.reader_id = reader.id rm.reader_type = reader.class.base_class.name rm.timestamp = self.send(readable_options[:on]) rm.save! end end end
unread?(reader)
click to toggle source
# File lib/unread/readable.rb, line 113 def unread?(reader) if self.respond_to?(:read_mark_id) && read_mark_id_belongs_to?(reader) # For use with scope "with_read_marks_for" return false if self.read_mark_id if global_timestamp = reader.read_mark_global(self.class).try(:timestamp) self.send(readable_options[:on]) > global_timestamp else true end else self.class.unread_by(reader).exists?(self.id) end end
Private Instance Methods
read_mark(reader)
click to toggle source
# File lib/unread/readable.rb, line 145 def read_mark(reader) read_marks.where(reader_id: reader.id, reader_type: reader.class.base_class.name).first end
read_mark_id_belongs_to?(reader)
click to toggle source
# File lib/unread/readable.rb, line 149 def read_mark_id_belongs_to?(reader) self.read_mark_reader_id.to_i == reader.id && self.read_mark_reader_type == reader.class.base_class.name end