Module: Unread::Readable::InstanceMethods

Defined in:
lib/unread/readable.rb

Instance Method Summary collapse

Instance Method Details

#mark_as_read!(options) ⇒ Object



128
129
130
131
132
133
134
135
136
137
138
139
140
141
# 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) ⇒ Boolean

Returns:

  • (Boolean)


113
114
115
116
117
118
119
120
121
122
123
124
125
126
# 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