module Mailboxer::Models::Messageable

Public Instance Methods

mailbox() click to toggle source

Gets the mailbox of the messageable

# File lib/mailboxer/models/messageable.rb, line 48
def mailbox
  @mailbox = Mailbox.new(self) if @mailbox.nil?
  @mailbox.type = :all
  @mailbox
end
mark_as_deleted(obj) click to toggle source

Mark the object as deleted for messageable.

Object can be:

  • A Receipt

  • A Notification

  • A Message

  • A Conversation

  • An array with any of them

# File lib/mailboxer/models/messageable.rb, line 158
def mark_as_deleted(obj)
  case obj
    when Receipt
      return obj.mark_as_deleted if obj.receiver == self
    when Message#, Notification
      obj.mark_as_deleted(self)
    when Conversation
      obj.mark_as_deleted(self)
    when Array
      obj.map{ |sub_obj| mark_as_deleted(sub_obj) }
    else
      return nil
  end
end
mark_as_read(obj) click to toggle source

Mark the object as read for messageable.

Object can be:

  • A Receipt

  • A Message

  • A Notification

  • A Conversation

  • An array with any of them

# File lib/mailboxer/models/messageable.rb, line 116
def mark_as_read(obj)
  case obj
  when Receipt
    obj.mark_as_read if obj.receiver == self
  when Message#, Notification
    obj.mark_as_read(self)
  when Conversation
    obj.mark_as_read(self)
  when Array
    obj.map{ |sub_obj| mark_as_read(sub_obj) }
  end
end
mark_as_unread(obj) click to toggle source

Mark the object as unread for messageable.

Object can be:

  • A Receipt

  • A Message

  • A Notification

  • A Conversation

  • An array with any of them

# File lib/mailboxer/models/messageable.rb, line 137
def mark_as_unread(obj)
  case obj
  when Receipt
    obj.mark_as_unread if obj.receiver == self
  when Message#, Notification
    obj.mark_as_unread(self)
  when Conversation
    obj.mark_as_unread(self)
  when Array
    obj.map{ |sub_obj| mark_as_unread(sub_obj) }
  end
end
reply(conversation, recipients, reply_body, subject=nil, sanitize_text=true, attachment=nil) click to toggle source

Basic reply method. USE NOT RECOMENDED. Use reply_to_sender, reply_to_all and reply_to_conversation instead.

# File lib/mailboxer/models/messageable.rb, line 76
def reply(conversation, recipients, reply_body, subject=nil, sanitize_text=true, attachment=nil)
  subject = subject || "RE: #{conversation.subject}"
  response = messages.new({:body => reply_body, :subject => subject, :attachment => attachment})
  response.conversation = conversation
  response.recipients = recipients.is_a?(Array) ? recipients : [recipients]
  response.recipients = response.recipients.uniq
  response.recipients.delete(self)
  response.deliver true, sanitize_text
end
reply_to_all(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil) click to toggle source

Replies to all the recipients of the message in the conversation

# File lib/mailboxer/models/messageable.rb, line 92
def reply_to_all(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil)
  reply(receipt.conversation, receipt.message.recipients, reply_body, subject, sanitize_text, attachment)
end
reply_to_conversation(conversation, reply_body, subject=nil, should_untrash=true, sanitize_text=true, attachment=nil) click to toggle source

Replies to all the recipients of the last message in the conversation and untrash any trashed message by messageable if should_untrash is set to true (this is so by default)

# File lib/mailboxer/models/messageable.rb, line 98
def reply_to_conversation(conversation, reply_body, subject=nil, should_untrash=true, sanitize_text=true, attachment=nil)
  #move conversation to inbox if it is currently in the trash and should_untrash parameter is true.
  if should_untrash && mailbox.is_trashed?(conversation)
    mailbox.receipts_for(conversation).untrash
    mailbox.receipts_for(conversation).mark_as_not_deleted
  end

  reply(conversation, conversation.last_message.recipients, reply_body, subject, sanitize_text, attachment)
end
reply_to_sender(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil) click to toggle source

Replies to the sender of the message in the conversation

# File lib/mailboxer/models/messageable.rb, line 87
def reply_to_sender(receipt, reply_body, subject=nil, sanitize_text=true, attachment=nil)
  reply(receipt.conversation, receipt.message.sender, reply_body, subject, sanitize_text, attachment)
end
search_messages(query) click to toggle source
# File lib/mailboxer/models/messageable.rb, line 215
def search_messages(query)
  @search = Receipt.search do
    fulltext query
    with :receiver_id, self.id
  end

  @search.results.map { |r| r.conversation }.uniq
end
send_message(recipients, msg_body, subject=nil, sanitize_text=true, attachment=nil, message_timestamp = Time.now) click to toggle source

Sends a messages, starting a new conversation, with the messageable as originator

# File lib/mailboxer/models/messageable.rb, line 61
def send_message(recipients, msg_body, subject=nil, sanitize_text=true, attachment=nil, message_timestamp = Time.now)
  convo = Conversation.new({:subject => subject})
  convo.created_at = message_timestamp
  convo.updated_at = message_timestamp
  message = messages.new({:body => msg_body, :subject => subject, :attachment => attachment})
  message.created_at = message_timestamp
  message.updated_at = message_timestamp
  message.conversation = convo
  message.recipients = recipients.is_a?(Array) ? recipients : [recipients]
  message.recipients = message.recipients.uniq
  message.deliver false, sanitize_text
end
trash(obj) click to toggle source

Mark the object as trashed for messageable.

Object can be:

  • A Receipt

  • A Message

  • A Notification

  • A Conversation

  • An array with any of them

# File lib/mailboxer/models/messageable.rb, line 181
def trash(obj)
  case obj
  when Receipt
    obj.move_to_trash if obj.receiver == self
  when Message#, Notification
    obj.move_to_trash(self)
  when Conversation
    obj.move_to_trash(self)
  when Array
    obj.map{ |sub_obj| trash(sub_obj) }
  end
end
untrash(obj) click to toggle source

Mark the object as not trashed for messageable.

Object can be:

  • A Receipt

  • A Message

  • A Notification

  • A Conversation

  • An array with any of them

# File lib/mailboxer/models/messageable.rb, line 202
def untrash(obj)
  case obj
  when Receipt
    obj.untrash if obj.receiver == self
  when Message#, Notification
    obj.untrash(self)
  when Conversation
    obj.untrash(self)
  when Array
    obj.map{ |sub_obj| untrash(sub_obj) }
  end
end