module Stex::Acts::Messagable::Extensions

Public Class Methods

included(base) click to toggle source
# File lib/stex/acts/messagable/extensions.rb, line 5
def self.included(base)
  base.class_eval do
    base.send :extend,  ClassMethods
  end
end

Public Instance Methods

additional_recipient_names() click to toggle source

@return [Array<String>]

The +recipient_name+s of all additional recipients. This uses the
+recipient_name+ option set in the recipient's model class.
# File lib/stex/acts/messagable/extensions.rb, line 85
def additional_recipient_names
  additional_recipients.map {|r| r.messagable_accessor(:recipient_name) }
end
additional_recipients() click to toggle source

@return [Messagable]

The additional recipients which were determined by the +send_message+ function
# File lib/stex/acts/messagable/extensions.rb, line 65
def additional_recipients
  meta_record_list(:additional_recipients)
end
additional_recipients=(recipients = []) click to toggle source

Sets additional recipients in this message’s metadata. This is automatically done by the send_message function.

@param [Array<Messagable>] recipients

The list of additional recipients
# File lib/stex/acts/messagable/extensions.rb, line 76
def additional_recipients=(recipients = [])
  meta_record_list_update(:additional_recipients, recipients)
end
mark_as_read!() click to toggle source

Sets the read_at attribute to the current time and saves the record without validations

# File lib/stex/acts/messagable/extensions.rb, line 44
def mark_as_read!
  self.read_at = Time.now
  save(false)
end
original_recipient_names() click to toggle source

@return [Array<String>]

The names of the +original_recipients+,
uses the +recipient_name+ option set in the recipient's model class
# File lib/stex/acts/messagable/extensions.rb, line 115
def original_recipient_names
  original_recipients.map do |recipient_or_array|
    if recipient_or_array.is_a?(Array)
      recipient      = recipient_or_array.first
      optional_names = recipient_or_array.last.map {|i| recipient.messagable_accessor(:optional_recipients).assoc(i.to_sym).third }
      [recipient.messagable_accessor(:recipient_name), *optional_names]
    else
      recipient_or_array.messagable_accessor(:recipient_name)
    end
  end
end
original_recipients() click to toggle source

@return [Array<Messagable>]

The original recipients which were initially given to the
+send_message+ function (so no derived recipients)
# File lib/stex/acts/messagable/extensions.rb, line 94
def original_recipients
  result = []
  metadata[:original_recipients].each do |recipient|

    #Optional recipients included
    if recipient.first.is_a?(Array)
      recipient_class, recipient_id = recipient.first
      result << [recipient_class.constantize.find(recipient_id), recipient.last]
    else
      recipient_class, recipient_id = recipient
      result << recipient_class.constantize.find(recipient_id)
    end
  end
  result
end
original_recipients=(recipients = []) click to toggle source

Stores the original recipients of this notification.

@param recipients

An array of +Messagable+ which may also include optional recipients
as symbols (see +{Stex::Acts::Messagable#send_notification}+)
# File lib/stex/acts/messagable/extensions.rb, line 134
def original_recipients=(recipients = [])
  result = []

  recipients.each do |recipient_or_array|
    if recipient_or_array.is_a?(Array)
      recipient = recipient_or_array.first
      result << [[recipient.class.to_s, recipient.id], recipient_or_array.last]
    else
      result << [recipient_or_array.class.to_s, recipient_or_array.id]
    end
  end

  metadata[:original_recipients] = result
end
read?() click to toggle source

@return [Bool] true if the notification was marked as read before

# File lib/stex/acts/messagable/extensions.rb, line 29
def read?
  read_at.present?
end
unread?() click to toggle source

@see read?

# File lib/stex/acts/messagable/extensions.rb, line 36
def unread?
  !read?
end
url() click to toggle source
# File lib/stex/acts/messagable/extensions.rb, line 53
def url
  metadata[:url]
end
url=(url) click to toggle source
# File lib/stex/acts/messagable/extensions.rb, line 57
def url=(url)
  metadata[:url] = url
end

Private Instance Methods

meta_record_list(key) click to toggle source

@private

# File lib/stex/acts/messagable/extensions.rb, line 154
def meta_record_list(key)
  return [] unless metadata[key]
  @meta_record_list ||= {}
  @meta_record_list[key] ||= metadata[key].map {|class_name, id| class_name.constantize.find(id)}
end
meta_record_list_update(key, list = []) click to toggle source

@private

# File lib/stex/acts/messagable/extensions.rb, line 163
def meta_record_list_update(key, list = [])
  @meta_record_list ||= {}
  @meta_record_list[key] = list
  metadata[key] = @meta_record_list[key].map {|r| [r.class.to_s, r.id] }
end
metadata() click to toggle source

Accessor method for all metadata Metadata can then be accessed using []

@private

# File lib/stex/acts/messagable/extensions.rb, line 175
def metadata
  self.serialized_metadata ||= {}
end