Class: MWS::API::Base

Inherits:
Object
  • Object
show all
Includes:
HTTParty
Defined in:
lib/ruby-mws/api/base.rb

Direct Known Subclasses

Inventory, Order, Report

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Base

Returns a new instance of Base.



17
18
19
20
21
22
# File 'lib/ruby-mws/api/base.rb', line 17

def initialize(connection)
  @connection = connection
  @saved_options = {}
  @next = {}
  self.class.base_uri "https://#{connection.host}"
end

Instance Attribute Details

#responseObject

Returns the value of attribute response.



15
16
17
# File 'lib/ruby-mws/api/base.rb', line 15

def response
  @response
end

Class Method Details

.def_request(requests, *options) ⇒ Object



24
25
26
27
28
29
30
31
32
33
# File 'lib/ruby-mws/api/base.rb', line 24

def self.def_request(requests, *options)
  [requests].flatten.each do |name|
    self.class_eval %Q{
      @@#{name}_options = options.first
      def #{name}(params={})
        send_request(:#{name}, params, @@#{name}_options)
      end
    }
  end
end

Instance Method Details

#default_params(name) ⇒ Object



53
54
55
56
57
58
59
60
61
# File 'lib/ruby-mws/api/base.rb', line 53

def default_params(name)
  {
    :action            => name.to_s.camelize,
    :signature_method  => 'HmacSHA256',
    :signature_version => '2',
    :timestamp         => Time.now.iso8601,
    :version           => '2009-01-01'
  }
end

#has_next?Boolean Also known as: has_next

Returns:

  • (Boolean)


63
64
65
# File 'lib/ruby-mws/api/base.rb', line 63

def has_next?
  not @next[:token].nil?
end

#inspectObject



72
73
74
# File 'lib/ruby-mws/api/base.rb', line 72

def inspect
  "#<#{self.class.to_s}:#{object_id}>"
end

#nextObject



68
69
70
# File 'lib/ruby-mws/api/base.rb', line 68

def next
  self.send(@next[:action], :next_token => @next[:token]) unless @next[:token].nil?
end

#send_request(name, params, options = {}) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/ruby-mws/api/base.rb', line 35

def send_request(name, params, options={})
  # prepare all required params...
  params = [default_params(name), params, options, @connection.to_hash].inject :merge

  params[:lists] ||= {}
  params[:lists][:marketplace_id] = "MarketplaceId.Id"

  query = Query.new params
  resp = self.class.send(params[:verb], query.request_uri)

  @response = Response.parse resp, name, params

  if @response.respond_to?(:next_token) and @next[:token] = @response.next_token  # modifying, not comparing
    @next[:action] = name.match(/_by_next_token/) ? name : "#{name}_by_next_token"
  end
  @response
end