Sha256: 10ac91df1e48d24bfbab372d8c74c5eb843ca6dc58c3ee191844d9e0f3aaeda9

Contents?: true

Size: 1.19 KB

Versions: 4

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.last_post_at <= read_at
    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.created_at
        state.update!(read_at: post.created_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

4 entries across 4 versions & 1 rubygems

Version Path
thredded-0.9.2 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.9.1 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.8.4 app/models/concerns/thredded/user_topic_read_state_common.rb
thredded-0.8.2 app/models/concerns/thredded/user_topic_read_state_common.rb