mirror of
https://github.com/basecamp/once-campfire.git
synced 2026-03-13 05:35:16 +09:00
39 lines
936 B
Ruby
39 lines
936 B
Ruby
class Message < ApplicationRecord
|
|
include Attachment, Broadcasts, Mentionee, Pagination, Searchable
|
|
|
|
belongs_to :room, touch: true
|
|
belongs_to :creator, class_name: "User", default: -> { Current.user }
|
|
|
|
has_many :boosts, dependent: :destroy
|
|
|
|
has_rich_text :body
|
|
|
|
before_create -> { self.client_message_id ||= Random.uuid } # Bots don't care
|
|
after_create_commit -> { room.receive(self) }
|
|
|
|
scope :ordered, -> { order(:created_at) }
|
|
scope :with_creator, -> { includes(:creator) }
|
|
|
|
def plain_text_body
|
|
body.to_plain_text.presence || attachment&.filename&.to_s || ""
|
|
end
|
|
|
|
def to_key
|
|
[ client_message_id ]
|
|
end
|
|
|
|
def content_type
|
|
case
|
|
when attachment? then "attachment"
|
|
when sound.present? then "sound"
|
|
else "text"
|
|
end.inquiry
|
|
end
|
|
|
|
def sound
|
|
plain_text_body.match(/\A\/play (?<name>\w+)\z/) do |match|
|
|
Sound.find_by_name match[:name]
|
|
end
|
|
end
|
|
end
|