Sha256: 73d8117e5b40125677703c6518915e1d4be19f439d00b87edb3c14f0b36e9bf7

Contents?: true

Size: 1.11 KB

Versions: 2

Compression:

Stored size: 1.11 KB

Contents

module UnreadMongoid
  module Readable
    module Scopes
      # TODO rename some of these

      def unread_by(user)
        self.not_in(_id: read_ids(user))
      end

      def read_by(user)
        self.in(_id: read_ids(user))
      end

      private
      def read_marks_query(user)
        assert_reader(user)

        ReadMark.where(readable_type: self.name, user_id: user._id)
      end

      def blanket_marks_query(user)
        read_marks_query(user).and(readable_id: nil).sort(timestamp: :desc)
      end

      def read_ids(user)
        specifically_marked_ids(user) + blanketed_ids(user)
      end

      def blanketed_ids(user)
        blanket = blanket_marks_query(user).first

        if blanket
          self.lte(self.readable_options[:on] => blanket.timestamp).only(:_id).map(&:_id)
        else
          []
        end
      end

      def specifically_marked_ids(user)
        time_comparison = "this.timestamp >= this.readable_timestamp"

        read_marks_query(user).ne(readable_id: nil)
          .for_js(time_comparison)
          .only(:readable_id)
          .map(&:readable_id)
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
unread-mongoid-0.0.3 lib/unread_mongoid/scopes.rb
unread-mongoid-0.0.2 lib/unread_mongoid/scopes.rb