loomio/loomio

View on GitHub
app/serializers/marked_as_read/discussion_serializer.rb

Summary

Maintainability
A
40 mins
Test Coverage
class MarkedAsRead::DiscussionSerializer < ActiveModel::Serializer
  embed :ids, include: true

  def self.attributes_from_reader(*attrs)
    attrs.each do |attr|
      case attr
      when :discussion_reader_id then define_method attr, -> { reader.id }
      else                            define_method attr, -> { reader.send(attr) }
      end
      define_method :"include_#{attr}?", -> { reader.present? }
    end
    attributes *attrs
  end

  attributes :id,
             :key,
             :items_count,
             :ranges

  attributes_from_reader :discussion_reader_id,
                         :read_ranges,
                         :last_read_at,
                         :dismissed_at

   def reader
     @reader ||= scope[:reader_cache].get_for(object) if scope[:reader_cache]
   end

   def scope
     super || {}
   end
end