Sha256: 7c33a6dd606cc69a317f3022ae9c20f147216f95abfcece1a196d940a24bf277

Contents?: true

Size: 1.19 KB

Versions: 6

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true
module Thredded
  module UserTopicReadStateCommon
    extend ActiveSupport::Concern
    included do
      extend ClassMethods
      validates :user_id, uniqueness: { scope: :postable_id }
    end

    # @return [Boolean]
    def read?
      postable.updated_at.to_i <= read_at.to_i
    end

    module ClassMethods
      # @param user_id [Fixnum]
      # @param topic_id [Fixnum]
      # @param post [Thredded::PostCommon]
      # @param post_page [Fixnum]
      def touch!(user_id, topic_id, post, post_page)
        # TODO: Switch to upsert once Travis supports PostgreSQL 9.5.
        # Travis issue: https://github.com/travis-ci/travis-ci/issues/4264
        # Upsert gem: https://github.com/seamusabshere/upsert
        state = find_or_initialize_by(user_id: user_id, postable_id: topic_id)
        fail ArgumentError, "expected post_page >= 1, given #{post_page.inspect}" if post_page < 1
        return unless !state.read_at? || state.read_at < post.updated_at
        state.update!(read_at: post.updated_at, page: post_page)
      end

      def read_on_first_post!(user, topic)
        create!(user: user, postable: topic, read_at: Time.zone.now, page: 1)
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
thredded-0.6.3 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.6.2 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.6.1 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.6.0 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.5.1 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.5.0 app/models/concerns/thredded/user_topic_read_state_common.rb