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&sectionid=#{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