Sha256: ff75d5ade6e263bda0bb82c014f3f5925f97a7f47798e6f8a2e0239bb0d61736
Contents?: true
Size: 1.78 KB
Versions: 3
Compression:
Stored size: 1.78 KB
Contents
# frozen_string_literal: true require 'dry/monads/result' require 'friendly_shipping/services/ups/client' require 'friendly_shipping/services/ups/serialize_access_request' require 'friendly_shipping/services/ups/serialize_rating_service_selection_request' require 'friendly_shipping/services/ups/parse_rate_response' require 'friendly_shipping/services/ups/shipping_methods' module FriendlyShipping module Services class Ups include Dry::Monads::Result::Mixin attr_reader :test, :key, :login, :password, :client CARRIER = FriendlyShipping::Carrier.new( id: 'ups', name: 'United Parcel Service', code: 'ups', shipping_methods: SHIPPING_METHODS ) TEST_URL = 'https://wwwcie.ups.com' LIVE_URL = 'https://onlinetools.ups.com' RESOURCES = { rates: '/ups.app/xml/Rate' }.freeze def initialize(key:, login:, password:, test: true, client: Client) @key = key @login = login @password = password @test = test @client = client end def carriers Success([CARRIER]) end def rate_estimates(shipment, _carriers) rate_request_xml = SerializeRatingServiceSelectionRequest.call(shipment: shipment) url = base_url + RESOURCES[:rates] request = FriendlyShipping::Request.new( url: url, body: access_request_xml + rate_request_xml ) client.post(request).bind do |response| ParseRateResponse.call(response: response, request: request, shipment: shipment) end end private def access_request_xml SerializeAccessRequest.call(key: key, login: login, password: password) end def base_url test ? TEST_URL : LIVE_URL 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/ups.rb |
friendly_shipping-0.2.5 | lib/friendly_shipping/services/ups.rb |
friendly_shipping-0.2.4 | lib/friendly_shipping/services/ups.rb |