Module: ActsAsReadable::HelperMethods
- Defined in:
- lib/acts_as_readable/acts_as_readable.rb
Class Method Summary collapse
- .all_read_at(readable_class, user) ⇒ Object
- .outer_join_readings(scope, user) ⇒ Object
- .read_conditions(readable_class, user, timestamp) ⇒ Object
- .readable_type(readable_class) ⇒ Object
- .unread_conditions(readable_class, user, timestamp) ⇒ Object
Class Method Details
.all_read_at(readable_class, user) ⇒ Object
42 43 44 |
# File 'lib/acts_as_readable/acts_as_readable.rb', line 42 def self.all_read_at(readable_class, user) user[readable_class.[:cache]] if readable_class.[:cache] end |
.outer_join_readings(scope, user) ⇒ Object
46 47 48 |
# File 'lib/acts_as_readable/acts_as_readable.rb', line 46 def self.outer_join_readings(scope, user) scope.joins("LEFT OUTER JOIN readings ON readings.readable_type = '#{readable_type(scope.model)}' AND readings.readable_id = #{scope.model.table_name}.id AND readings.user_id = #{user.id}") end |
.read_conditions(readable_class, user, timestamp) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/acts_as_readable/acts_as_readable.rb', line 27 def self.read_conditions(readable_class, user, ) ["(readings.state IS NULL AND COALESCE(#{readable_class.table_name}.#{} <= :all_read_at, FALSE)) OR (readings.state = 'unread' AND COALESCE(readings.updated_at <= :all_read_at, FALSE)) OR (readings.state = 'read' AND #{readable_class.table_name}.#{} <= readings.#{})", :all_read_at => all_read_at(readable_class, user)] end |
.readable_type(readable_class) ⇒ Object
50 51 52 |
# File 'lib/acts_as_readable/acts_as_readable.rb', line 50 def self.readable_type(readable_class) readable_class.base_class.name end |
.unread_conditions(readable_class, user, timestamp) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/acts_as_readable/acts_as_readable.rb', line 34 def self.unread_conditions(readable_class, user, ) # IF there is no reading and it has been updated since we last read all OR there is an unreading and we haven't read all since then ["(readings.state IS NULL AND COALESCE(#{readable_class.table_name}.#{} > :all_read_at, TRUE)) OR (readings.state = 'unread' AND COALESCE(readings.updated_at > :all_read_at, TRUE)) OR (readings.state = 'read' AND #{readable_class.table_name}.#{} > readings.#{})", :all_read_at => all_read_at(readable_class, user)] end |