class MWS::Request
Constants
- DEFAULTS
Attributes
parameters[RW]
Public Class Methods
new(parameters, secret_access_key)
click to toggle source
# File lib/mws/request.rb, line 20 def initialize(parameters, secret_access_key) @parameters = parameters.merge!(DEFAULTS) @secret_access_key = secret_access_key end
Public Instance Methods
<<(hash)
click to toggle source
# File lib/mws/request.rb, line 25 def <<(hash) @parameters.merge!(hash) end
post()
click to toggle source
# File lib/mws/request.rb, line 29 def post self.class.post('/FulfillmentInboundShipment/2010-10-01?' + sign(build_query_string)) end
Private Instance Methods
build_query_string()
click to toggle source
# File lib/mws/request.rb, line 54 def build_query_string normalize.merge('Timestamp' => timestamp).sort.map { |k, v| "#{k}=" + escape(v) }.join('&') end
escape(value)
click to toggle source
# File lib/mws/request.rb, line 39 def escape(value) value.gsub(/([^a-zA-Z0-9_.~-]+)/) do '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase end end
normalize()
click to toggle source
# File lib/mws/request.rb, line 45 def normalize @parameters.inject({}) do |hash, (k, v)| v = v.is_a?(Array) ? v.join(',') : v.to_s k = k.to_s.split('_').map {|w| w[0, 1] = w[0, 1].upcase; w }.join hash[k] = v hash end end
sign(url)
click to toggle source
# File lib/mws/request.rb, line 58 def sign(url) digest = OpenSSL::Digest::Digest.new('sha256') url_to_sign = [ "POST", "mws.amazonservices.com", '/FulfillmentInboundShipment/2010-10-01', url].join("\n") hmac = OpenSSL::HMAC.digest(digest, @secret_access_key, url_to_sign) url + "&Signature=" + escape([hmac].pack('m').chomp) end
timestamp()
click to toggle source
# File lib/mws/request.rb, line 35 def timestamp Time.now.utc.strftime '%Y-%m-%dT%H:%M:%SZ' end