Class: MWS::API::Base

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

Direct Known Subclasses

Inventory, Order

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(connection) ⇒ Base

Returns a new instance of Base.



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

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.



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

def response
  @response
end

Class Method Details

.def_request(requests, *options) ⇒ Object



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

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

#has_next?Boolean Also known as: has_next

Returns:

  • (Boolean)


56
57
58
# File 'lib/ruby-mws/api/base.rb', line 56

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

#inspectObject



65
66
67
# File 'lib/ruby-mws/api/base.rb', line 65

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

#nextObject



61
62
63
# File 'lib/ruby-mws/api/base.rb', line 61

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

#send_request(name, params, options) ⇒ Object



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

def send_request(name, params, options)
  # prepare all required params...
  params = [params, options, @connection.to_hash].inject :merge
  
  # default/common params
  params[:action]            ||= name.to_s.camelize
  params[:signature_method]  ||= 'HmacSHA256'
  params[:signature_version] ||= '2'
  params[:timestamp]         ||= Time.now.iso8601
  params[:version]           ||= '2009-01-01'

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

  query = Query.new params
  @response = Response.parse self.class.send(params[:verb], query.request_uri), 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