Sha256: 6bd4c68e853f4a62c8eada706f233b59d2f6c050bf9f8f900ea5898feb21b32c

Contents?: true

Size: 1.34 KB

Versions: 16

Compression:

Stored size: 1.34 KB

Contents

class ChatMessage < AbstractAdapter
  belongs_to :chat
  belongs_to :author, class_name: 'User'

  has_many :chat_users, through: :chat
  has_many :recipients, lambda {|message|  where(':created_at >= chat_users.created_at and (chat_users.departed_at IS NULL OR :created_at <= chat_users.departed_at)', created_at: message.created_at ) }, through: :chat_users, source: :user, class_name: 'User'

  # Create ChatUserMessage records for each recipient to track read status
  has_many :chat_message_users, dependent: :destroy

  validate :author_in_chat

  def author_in_chat
    errors[:base] << 'User not in chat session.' unless chat.active_users.include? author
  end

  before_save :create_message_users, if: :new_record?
  def create_message_users
    chat_users.merge(ChatUser.current).each do |cu|
      chat_message_users.build(user: cu.user)
    end
  end

  def read_by?(user)
    chat_message_users.merge(ChatMessageUser.read).map(&:user_id).include?(user.id)
  end

  def self.find_chat_for_users(users)
    # presumably much more efficient ways to run an intersecton, we want to find the last
    # exact match with the users being messaged to append to the existing chat.
    Chat.eager_load(:chat_users).where("chat_users.departed_at IS NULL").order('chats.created_at desc').detect {|c| c.chat_users.map(&:user_id).uniq.sort == users.map(&:id).sort }
  end

end 

Version data entries

16 entries across 16 versions & 2 rubygems

Version Path
introspective_grape-0.3.2 spec/dummy/app/models/chat_message.rb
introspective_grape-0.3.1 spec/dummy/app/models/chat_message.rb
introspective_grape-0.3.0 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.9 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.8 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.7 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.6 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.5 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.4 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.3 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.2 spec/dummy/app/models/chat_message.rb
introspective_grape-0.2.0 spec/dummy/app/models/chat_message.rb
introspective_grape-0.1.9 spec/dummy/app/models/chat_message.rb
introspective_grape-0.0.4 spec/dummy/app/models/chat_message.rb
introspective_grape-0.0.3 spec/dummy/app/models/chat_message.rb
introspective_admin-0.0.1 spec/dummy/app/models/chat_message.rb