class Osm::Email::DeliveryReport
Constants
- TIME_FORMAT
- VALID_STATUSES
Public Class Methods
get_for_section(api, section, options={})
click to toggle source
Get delivery reports @param [Osm::Api] api The api to use to make the request @param [Osm::Section, Fixnum, to_i
] section The section (or its ID) to get the reports for @!macro options_get @return [Array<Osm::Email::DeliveryReport>]
# File lib/osm/email.rb, line 109 def self.get_for_section(api, section, options={}) Osm::Model.require_access_to_section(api, section, options) section_id = section.to_i cache_key = ['email_delivery_reports', section_id] if !options[:no_cache] && Osm::Model.cache_exist?(api, cache_key) return cache_read(api, cache_key) end reports = [] recipients = {} data = api.perform_query("ext/settings/emails/?action=getDeliveryReport§ionid=#{section_id}") data.each do |item| case item['type'] when 'email' # Create an Osm::Email::DeliveryReport in reports array id = Osm::to_i_or_nil(item['id']) sent_at_str, subject = item['name'].to_s.split(' - ', 2).map{ |i| i.to_s.strip } reports.push Osm::Email::DeliveryReport.new( id: id, sent_at: Time.strptime(sent_at_str, TIME_FORMAT), subject: subject, section_id: section_id, ) recipients[id] = [] when 'oneEmail' # Create an Osm::Email::DeliveryReport::Email::Recipient in recipients[email_id] array report_id, id = item['id'].to_s.strip.split('-').map{ |i| Osm::to_i_or_nil(i) } status = item['status_raw'].to_sym status = :bounced if status.eql?(:bounce) member_id = Osm::to_i_or_nil(item['member_id']) recipients[report_id].push Osm::Email::DeliveryReport::Recipient.new( id: id, address: item['email'], status: status, member_id: member_id, ) end end # each item in data # Add recipients to reports reports.each do |report| recs = recipients[report.id] # Set report for each recipient recs.each do |recipient| recipient.delivery_report = report end report.recipients = recs end cache_write(api, cache_key, reports) return reports end
Public Instance Methods
<=>(another)
click to toggle source
# File lib/osm/email.rb, line 216 def <=>(another) result = self.sent_at <=> another.try(:sent_at) result = self.id <=> another.try(:id) if result.eql?(0) return result end
get_email(api, options={})
click to toggle source
Get email contents for this report @param [Osm::Api] api The api to use to make the request @!macro options_get @return [Osm::Email::DeliveryReport::Email]
# File lib/osm/email.rb, line 170 def get_email(api, options={}) Osm::Model.require_access_to_section(api, section_id, options) cache_key = ['email_delivery_reports_email', section_id, id] if !options[:no_cache] && Osm::Model.cache_exist?(api, cache_key) return cache_read(api, cache_key) end email = Osm::Email::DeliveryReport::Email.fetch_from_osm(api, section_id, id) cache_write(api, cache_key, email) return email end
to_s()
click to toggle source
# File lib/osm/email.rb, line 212 def to_s "#{sent_at.strftime(TIME_FORMAT)} - #{subject}" end