Sha256: 6f3a87be4d933706e12911b2664d94ec8c80517ff6571a7d33e972430caea152

Contents?: true

Size: 1.19 KB

Versions: 3

Compression:

Stored size: 1.19 KB

Contents

# frozen_string_literal: true

require 'json'
require 'data_uri'

module FriendlyShipping
  module Services
    class ShipEngine
      class ParseLabelResponse
        def self.call(request:, response:)
          parsed_json = JSON.parse(response.body)
          label_uri_string = parsed_json['label_download']['href']
          label_data = nil
          label_url = nil
          if label_uri_string.starts_with?('data')
            label_data = URI::Data.new(label_uri_string).data
          else
            label_url = label_uri_string
          end
          [
            FriendlyShipping::Label.new(
              id: parsed_json['label_id'],
              shipment_id: parsed_json['shipment_id'],
              tracking_number: parsed_json['tracking_number'],
              service_code: parsed_json['service_code'],
              label_href: label_url,
              label_data: label_data,
              label_format: parsed_json['label_format'].to_sym,
              shipment_cost: parsed_json['shipment_cost']['amount'],
              data: parsed_json,
              original_request: request,
              original_response: response
            )
          ]
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
friendly_shipping-0.2.6 lib/friendly_shipping/services/ship_engine/parse_label_response.rb
friendly_shipping-0.2.5 lib/friendly_shipping/services/ship_engine/parse_label_response.rb
friendly_shipping-0.2.4 lib/friendly_shipping/services/ship_engine/parse_label_response.rb