Class: Decidim::Messaging::Conversation
- Inherits:
-
ApplicationRecord
- Object
- ActiveRecord::Base
- ApplicationRecord
- Decidim::Messaging::Conversation
- Includes:
- DataPortability
- Defined in:
- app/models/decidim/messaging/conversation.rb
Overview
Holds a conversation between a number of participants. Each conversation would be equivalent to an entry in your Telegram conversation list, be it a group or a one-to-one conversation.
Class Method Summary collapse
- .export_serializer ⇒ Object
-
.start(originator:, interlocutors:, body:) ⇒ Decidim::Messaging::Conversation
Initiates a conversation between a user and a set of interlocutors with an initial message.
-
.start!(originator:, interlocutors:, body:) ⇒ Decidim::Messaging::Conversation
Initiates a conversation between a user and a set of interlocutors with an initial message.
- .user_collection(user) ⇒ Object
Instance Method Summary collapse
-
#add_message(sender:, body:) ⇒ Decidim::Messaging::Message
Appends a message to this conversation.
-
#add_message!(sender:, body:) ⇒ Decidim::Messaging::Message
Appends a message to this conversation and saves everything to DB.
-
#interlocutors(user) ⇒ Array<Decidim::User>
Given a user, returns her interlocutors in this conversation.
-
#last_message ⇒ Decidim::Messaging::Message
The most recent message in this conversation.
-
#unread_count(user) ⇒ Integer
The number of messages in this conversation a user has not yet read.
Class Method Details
.export_serializer ⇒ Object
136 137 138 |
# File 'app/models/decidim/messaging/conversation.rb', line 136 def self.export_serializer Decidim::DataPortabilitySerializers::DataPortabilityConversationSerializer end |
.start(originator:, interlocutors:, body:) ⇒ Decidim::Messaging::Conversation
Initiates a conversation between a user and a set of interlocutors with an initial message.
67 68 69 70 71 72 73 |
# File 'app/models/decidim/messaging/conversation.rb', line 67 def self.start(originator:, interlocutors:, body:) conversation = new(participants: [originator] + interlocutors) conversation.(sender: originator, body: body) conversation end |
.start!(originator:, interlocutors:, body:) ⇒ Decidim::Messaging::Conversation
Initiates a conversation between a user and a set of interlocutors with an initial message. Works just like .start, but saves all the dependent objects into DB.
44 45 46 47 48 49 50 51 52 53 54 |
# File 'app/models/decidim/messaging/conversation.rb', line 44 def self.start!(originator:, interlocutors:, body:) conversation = start( originator: originator, interlocutors: interlocutors, body: body ) conversation.save! conversation end |
.user_collection(user) ⇒ Object
132 133 134 |
# File 'app/models/decidim/messaging/conversation.rb', line 132 def self.user_collection(user) Decidim::Messaging::UserConversations.for(user) end |
Instance Method Details
#add_message(sender:, body:) ⇒ Decidim::Messaging::Message
Appends a message to this conversation
95 96 97 98 99 100 101 |
# File 'app/models/decidim/messaging/conversation.rb', line 95 def (sender:, body:) = .build(sender: sender, body: body) .envelope_for(interlocutors(sender)) end |
#add_message!(sender:, body:) ⇒ Decidim::Messaging::Message
Appends a message to this conversation and saves everything to DB.
81 82 83 84 85 |
# File 'app/models/decidim/messaging/conversation.rb', line 81 def (sender:, body:) (sender: sender, body: body) save! end |
#interlocutors(user) ⇒ Array<Decidim::User>
Given a user, returns her interlocutors in this conversation
110 111 112 |
# File 'app/models/decidim/messaging/conversation.rb', line 110 def interlocutors(user) participants.reject { |participant| participant.id == user.id } end |
#last_message ⇒ Decidim::Messaging::Message
The most recent message in this conversation
119 120 121 |
# File 'app/models/decidim/messaging/conversation.rb', line 119 def .last end |
#unread_count(user) ⇒ Integer
The number of messages in this conversation a user has not yet read
128 129 130 |
# File 'app/models/decidim/messaging/conversation.rb', line 128 def unread_count(user) receipts.unread_by(user).count end |