class ReactiveShipping::Kunaki
Constants
- CARRIERS
- COUNTRIES
- URL
Public Instance Methods
find_rates(origin, destination, packages, options = {})
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 66 def find_rates(origin, destination, packages, options = {}) requires!(options, :items) commit(origin, destination, options) end
valid_credentials?()
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 71 def valid_credentials? true end
Private Instance Methods
build_rate_estimates(response, origin, destination)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 109 def build_rate_estimates(response, origin, destination) response["Options"].collect do |quote| RateEstimate.new(origin, destination, carrier_for(quote["Description"]), quote["Description"], :total_price => quote["Price"], :currency => "USD" ) end end
build_request(destination, options)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 77 def build_request(destination, options) country = COUNTRIES[destination.country_code] state_province = %w(US CA).include?(destination.country_code.to_s) ? destination.state : '' builder = Nokogiri::XML::Builder.new do |xml| xml.ShippingOptions do xml.AddressInfo do xml.Country(country) xml.State_Province(state_province) xml.PostalCode(destination.zip) end options[:items].each do |item| xml.Product do xml.ProductId(item[:sku]) xml.Quantity(item[:quantity]) end end end end builder.to_xml end
carrier_for(service)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 118 def carrier_for(service) CARRIERS.dup.find { |carrier| service.to_s =~ /^#{carrier}/i } || service.to_s.split(" ").first end
commit(origin, destination, options)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 100 def commit(origin, destination, options) request = build_request(destination, options) response = parse( ssl_post(URL, request, "Content-Type" => "text/xml") ) RateResponse.new(success?(response), message_from(response), response, :rates => build_rate_estimates(response, origin, destination) ) end
message_from(response)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 151 def message_from(response) response["ErrorText"] end
parse(xml)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 122 def parse(xml) response = {} response["Options"] = [] document = Nokogiri.XML(sanitize(xml)) response["ErrorCode"] = document.at('/Response/ErrorCode').text response["ErrorText"] = document.at('/Response/ErrorText').text document.xpath("Response/Option").each do |node| rate = {} rate["Description"] = node.at("Description").text rate["Price"] = node.at("Price").text response["Options"] << rate end response end
sanitize(response)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 140 def sanitize(response) result = response.to_s result.gsub!("\r\n", "") result.gsub!(/<(\/)?(BODY|HTML)>/, '') result end
success?(response)
click to toggle source
# File lib/reactive_shipping/carriers/kunaki.rb, line 147 def success?(response) response["ErrorCode"] == "0" end