Sha256: 7fbcbb9b26bed8ec02e8ae1d6ab3db8421e357fa46672dba2cc27599c697abf8

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

require "base64"

module Shippinglogic
  class UPS
    class ShipAccept < Service
      def self.path
        "/ShipAccept"
      end
      
      class Details
        class Shipment; attr_accessor :tracking_number, :label; end
        
        attr_accessor :rate, :currency, :shipments
        
        def initialize(response)
          details = response[:shipment_results]
          
          charges       = details[:shipment_charges][:total_charges]
          self.rate     = BigDecimal.new(charges[:monetary_value])
          self.currency = charges[:currency_code]
          
          self.shipments = [*details[:package_results]].collect do |package|
            shipment                  = Shipment.new
            shipment.tracking_number  = package[:tracking_number]
            shipment.label            = Base64.decode64(package[:label_image][:graphic_image])
            shipment
          end
        end
      end
      
      attribute :digest, :string
      
      private
        def target
          @target ||= Details.new(request(build_request))
        end
        
        def build_request
          b = builder
          build_authentication(b)
          b.instruct!
          
          b.ShipmentAcceptRequest do
            b.Request do
              b.RequestAction "ShipAccept"
            end
            
            b.ShipmentDigest digest
          end
        end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
shippinglogic-1.2.3 lib/shippinglogic/ups/ship_accept.rb