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