Module: ActsAsChattable::Model::InstanceMethods

Defined in:
lib/acts_as_chattable/model.rb

Instance Method Summary collapse

Instance Method Details

#delete_message(message) ⇒ Object

Mark message as deleted



135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/acts_as_chattable/model.rb', line 135

def delete_message(message)
  current_user = self

  case current_user
    when message.to
      attribute = message.recipient_delete ? :recipient_permanent_delete : :recipient_delete
    when message.from
      attribute = message.sender_delete ? :sender_permanent_delete : :sender_delete
    else
      raise "#{current_user} can't delete this message"
  end

  message.update_attributes!(attribute => true)
end

#deleted_messagesActiveRecord::Relation

Returns all messages from trash

Returns:

  • (ActiveRecord::Relation)

    returns all messages from trash



93
94
95
# File 'lib/acts_as_chattable/model.rb', line 93

def deleted_messages
  messages true
end

#messages(trash = false) ⇒ ActiveRecord::Relation

Returns all messages connected with user.

Returns:

  • (ActiveRecord::Relation)

    all messages connected with user



60
61
62
63
64
65
# File 'lib/acts_as_chattable/model.rb', line 60

def messages(trash = false)
  result = self.class.messages_class_name.connected_with(self, trash)
  result.relation_context = self

  result
end

#messages_with(friend) ⇒ Object



67
68
69
70
71
72
# File 'lib/acts_as_chattable/model.rb', line 67

def messages_with(friend)
  ActsAsChattable::Message.where("(received_messageable_id = #{self.id} AND sent_messageable_id = #{friend.id}) 
         OR
         (sent_messageable_id = #{self.id} AND received_messageable_id = #{friend.id})")
  .order('id DESC')
end

#received_messagesActiveRecord::Relation

Returns all messages from inbox

Returns:

  • (ActiveRecord::Relation)

    returns all messages from inbox



75
76
77
78
79
80
81
# File 'lib/acts_as_chattable/model.rb', line 75

def received_messages
  result = ActsAsChattable.rails_api.new(received_messages_relation)
  result = result.scoped.where(:recipient_delete => false)
  result.relation_context = self

  result
end

#restore_message(message) ⇒ Object

Mark message as restored



151
152
153
154
155
156
157
158
159
160
161
162
163
164
# File 'lib/acts_as_chattable/model.rb', line 151

def restore_message(message)
  current_user = self

  case current_user
    when message.to
      attribute = :recipient_delete
    when message.from
      attribute = :sender_delete
    else
      raise "#{current_user} can't restore this message"
  end

  message.update_attributes!(attribute => false)
end

#send_message(to, *args) ⇒ ActsAsChattable::Message

Method sens message to another user

Parameters:

  • to (ActiveRecord::Base)
  • topic (String)
  • body (String)

Returns:



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/acts_as_chattable/model.rb', line 103

def send_message(to, *args)
  message_attributes = {}

  case args.first
    when String
      self.class.messages_class_name.required.each_with_index do |attribute, index|
        message_attributes[attribute] = args[index]
      end
    when Hash
      message_attributes = args.first
  end

  message = self.class.messages_class_name.new message_attributes
  message.received_messageable = to
  message.sent_messageable = self
  message.save

  message
end

#send_message!(to, *args) ⇒ ActsAsChattable::Message

Method send message to another user and raise exception in case of validation errors

Parameters:

  • to (ActiveRecord::Base)
  • topic (String)
  • body (String)

Returns:



130
131
132
# File 'lib/acts_as_chattable/model.rb', line 130

def send_message!(to, *args)
  send_message(to, *args).save!
end

#sent_messagesActiveRecord::Relation

Returns all messages from outbox

Returns:

  • (ActiveRecord::Relation)

    returns all messages from outbox



84
85
86
87
88
89
90
# File 'lib/acts_as_chattable/model.rb', line 84

def sent_messages
  result = ActsAsChattable.rails_api.new(sent_messages_relation)
  result = result.scoped.where(:sender_delete => false)
  result.relation_context = self

  result
end