class Paubox::EmailDisposition

Parses email dispositions from /v1/message_reciept response to friendly Ruby

Constants

MessageDelivery
MessageDeliveryStatus
MessageMultiDeliveryStatus
ResponseError

Attributes

errors[R]
message_deliveries[R]
message_id[R]
raw_json_response[R]
response[R]
source_tracking_id[R]

Public Class Methods

new(response) click to toggle source
# File lib/paubox/email_disposition.rb, line 15
def initialize(response)
  @response = response
  @raw_json_response = response.to_json
  @source_tracking_id = response.dig('sourceTrackingId')
  @message_data = response.dig('data', 'message')
  @message_id = @message_data ? @message_data['id'] : nil
  @message_deliveries ||= build_message_deliveries
  @errors ||= build_errors
end

Public Instance Methods

build_errors() click to toggle source
# File lib/paubox/email_disposition.rb, line 29
def build_errors
  return [] unless response['errors']

  errors = response['errors']
  errors.map { |e| ResponseError.new(e['code'], e['status'], e['title'], e['details']) }
end
errors?() click to toggle source
# File lib/paubox/email_disposition.rb, line 25
def errors?
  errors.any?
end

Private Instance Methods

build_message_deliveries() click to toggle source
# File lib/paubox/email_disposition.rb, line 38
def build_message_deliveries
  return [] unless @message_data

  deliveries = @message_data.fetch('message_deliveries', [])
  deliveries.map do |delivery|
    status = build_message_delivery_status(delivery['status'])
    MessageDelivery.new(delivery['recipient'], status)
  end
end
build_message_delivery_status(stat) click to toggle source
# File lib/paubox/email_disposition.rb, line 48
def build_message_delivery_status(stat)
  delivery_status = stat['deliveryStatus']
  delivery_time = stat['deliveryTime'].to_s.empty? ? nil : DateTime.parse(stat['deliveryTime'])
  opened_status = stat['openedStatus'].to_s.empty? ? 'unopened' : stat['openedStatus']
  opened_time = stat['openedTime'].to_s.empty? ? nil : DateTime.parse(stat['openedTime'])
  return MessageMultiDeliveryStatus.new(delivery_status, delivery_time) if multi_recipient?

  MessageDeliveryStatus.new(delivery_status, delivery_time, opened_status, opened_time)
end
multi_recipient?() click to toggle source
# File lib/paubox/email_disposition.rb, line 58
def multi_recipient?
  @message_data.fetch('message_deliveries', []).length > 1
end