lib/paubox/email_disposition.rb in paubox-0.2.3 vs lib/paubox/email_disposition.rb in paubox-0.3.0
- old
+ new
@@ -1,57 +1,62 @@
-module Paubox
- # Parses email dispositions from /v1/message_reciept response to friendly Ruby
- class EmailDisposition
- require 'time'
- attr_reader :response, :raw_json_response, :source_tracking_id, :message_id,
- :message_deliveries, :errors
- MessageDelivery = Struct.new(:recipient, :status)
- MessageDeliveryStatus = Struct.new(:delivery_status, :delivery_time,
- :opened_status, :opened_time)
- MessageMultiDeliveryStatus = Struct.new(:delivery_status, :delivery_time)
- ResponseError = Struct.new(:code, :status, :title, :details)
-
- 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
-
- def errors?
- errors.any?
- end
-
- def build_errors
- return [] unless response['errors']
- errors = response['errors']
- errors.map { |e| ResponseError.new(e['code'], e['status'], e['title'], e['details']) }
- end
-
- private
-
- 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
-
- 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
-
- def multi_recipient?
- @message_data.fetch('message_deliveries', []).length > 1
- end
- end
-end
+# frozen_string_literal: true
+
+module Paubox
+ # Parses email dispositions from /v1/message_reciept response to friendly Ruby
+ class EmailDisposition
+ require 'time'
+ attr_reader :response, :raw_json_response, :source_tracking_id, :message_id,
+ :message_deliveries, :errors
+ MessageDelivery = Struct.new(:recipient, :status)
+ MessageDeliveryStatus = Struct.new(:delivery_status, :delivery_time,
+ :opened_status, :opened_time)
+ MessageMultiDeliveryStatus = Struct.new(:delivery_status, :delivery_time)
+ ResponseError = Struct.new(:code, :status, :title, :details)
+
+ 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
+
+ def errors?
+ errors.any?
+ end
+
+ def build_errors
+ return [] unless response['errors']
+
+ errors = response['errors']
+ errors.map { |e| ResponseError.new(e['code'], e['status'], e['title'], e['details']) }
+ end
+
+ private
+
+ 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
+
+ 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
+
+ def multi_recipient?
+ @message_data.fetch('message_deliveries', []).length > 1
+ end
+ end
+end