amazon_mws_products 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use 1.9.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in amazon_mws_products.gemspec
4
+ gemspec
data/Guardfile ADDED
@@ -0,0 +1,9 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+ end
9
+
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 Donald Plummer
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,39 @@
1
+ # AmazonMwsProducts
2
+
3
+ A client for the AmazonMWS Products API as defined by:
4
+
5
+ https://images-na.ssl-images-amazon.com/images/G/01/mwsportal/doc/en_US/products/MWSProductsApiReference._V388666043_.pdf
6
+
7
+ TODO: Write a gem description
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'amazon_mws_products'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install amazon_mws_products
22
+
23
+ ## Usage
24
+
25
+ TODO: Write usage instructions here
26
+
27
+ ## Contributing
28
+
29
+ 1. Fork it
30
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
31
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
32
+ 4. Push to the branch (`git push origin my-new-feature`)
33
+ 5. Create new Pull Request
34
+
35
+ ## License
36
+
37
+ AmazonMwsProducts is released under the MIT license:
38
+
39
+ * http://www.opensource.org/licenses/MIT
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,30 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'amazon_mws_products/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "amazon_mws_products"
8
+ gem.version = AmazonMwsProducts::VERSION
9
+ gem.authors = ["Donald Plummer", "Michael Xavier"]
10
+ gem.email = ["donald.plummer@gmail.com", "michael@michaelxavier.net"]
11
+ gem.description = %q{A client for AmazonMWS Products API}
12
+ gem.summary = %q{A client for AmazonMWS Products API}
13
+ gem.homepage = "https://github.com/dplummer/amazon_mws_products"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+ gem.add_dependency 'faraday', ">= 0.8"
21
+ gem.add_dependency 'faraday_middleware'
22
+ gem.add_dependency 'nokogiri'
23
+
24
+ gem.add_development_dependency 'rspec', '~> 2.9.0'
25
+ gem.add_development_dependency 'guard'
26
+ gem.add_development_dependency 'guard-rspec'
27
+ gem.add_development_dependency 'timecop'
28
+ gem.add_development_dependency 'webmock'
29
+ gem.add_development_dependency 'pry'
30
+ end
@@ -0,0 +1,21 @@
1
+ %w[AWS_SELLER_ID AWS_ACCESS_KEY_ID AWS_MARKETPLACE_ID AWS_SECRET_ACCESS_KEY].each do |key|
2
+ if !ENV.has_key?(key)
3
+ puts "Configure an environment variable with your #{key}"
4
+ exit(1)
5
+ end
6
+ end
7
+
8
+ require_relative '../lib/amazon_mws_products'
9
+ require 'ostruct'
10
+ require 'pp'
11
+ require 'nokogiri'
12
+
13
+
14
+ account = OpenStruct.new(seller_id: ENV["AWS_SELLER_ID"],
15
+ aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"],
16
+ marketplace_id: ENV["AWS_MARKETPLACE_ID"],
17
+ secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"])
18
+
19
+ client = AmazonMwsProducts::ListMatchingProducts.new(account, "harry potter dvd")
20
+ response = client.execute # response body will be a Nokogiri::XML::Document
21
+ puts response.body.to_xml
@@ -0,0 +1,9 @@
1
+ module AmazonMwsProducts
2
+ # Your code goes here...
3
+ end
4
+
5
+ require_relative 'amazon_mws_products/version'
6
+ require_relative 'amazon_mws_products/nokogiri_parser_middleware'
7
+ require_relative 'amazon_mws_products/client'
8
+ require_relative 'amazon_mws_products/get_matching_products'
9
+ require_relative 'amazon_mws_products/list_matching_products'
@@ -0,0 +1,89 @@
1
+ require 'faraday'
2
+ require 'faraday_middleware'
3
+ require 'base64'
4
+ require 'cgi'
5
+ require 'uri'
6
+ require 'time'
7
+ require 'base64'
8
+ require 'openssl'
9
+
10
+ module AmazonMwsProducts
11
+ class Client
12
+ AWS_API_VERSION = '2011-10-01'
13
+ SIGNATURE_VERSION = '2'
14
+ SIGNATURE_METHOD = 'HmacSHA256'
15
+ ENDPOINT = 'mws.amazonservices.com'
16
+ PATH = '/Products/2011-10-01'
17
+
18
+ attr_reader :account, :action
19
+
20
+ def initialize(account, action)
21
+ @account = account
22
+ @action = action
23
+ end
24
+
25
+ def get(additional_params)
26
+ make_request(:get, additional_params)
27
+ end
28
+
29
+ private
30
+
31
+ def make_request(http_verb, additional_params)
32
+ params = request_parameters(http_verb, additional_params)
33
+ resource.send(http_verb, PATH, params)
34
+ end
35
+
36
+ def resource
37
+ conn = Faraday.new(:url => uri)
38
+ conn.response :nokogiri_parser
39
+ conn
40
+ end
41
+
42
+ def uri
43
+ URI::HTTPS.build(:host => ENDPOINT).to_s
44
+ end
45
+
46
+ def request_parameters(http_verb, additional_params)
47
+ params = default_params.merge(additional_params)
48
+
49
+ sign_params(http_verb, account.secret_access_key, params)
50
+ end
51
+
52
+ def default_params
53
+ {
54
+ 'AWSAccessKeyId' => account.aws_access_key_id,
55
+ 'Action' => action,
56
+ 'SellerId' => account.seller_id,
57
+ 'Timestamp' => Time.now.utc.xmlschema,
58
+ 'Version' => AWS_API_VERSION,
59
+ 'MarketplaceId' => account.marketplace_id,
60
+ }
61
+ end
62
+
63
+ def sign_params(http_verb, secret_key, params)
64
+ full_params = params.merge({"SignatureVersion" => SIGNATURE_VERSION,
65
+ "SignatureMethod" => SIGNATURE_METHOD })
66
+ digest = OpenSSL::HMAC.digest('sha256',
67
+ secret_key,
68
+ serialized_params(full_params, http_verb))
69
+
70
+ # chomp -- the base64 encoded version will have a newline at the end
71
+ full_params["Signature"] = Base64.encode64(digest).chomp
72
+ full_params
73
+ end
74
+
75
+ def serialized_params(params, http_verb)
76
+ [ http_verb.to_s.upcase,
77
+ ENDPOINT,
78
+ PATH,
79
+ canonicalize_params(params) ].join("\n")
80
+ end
81
+
82
+ def canonicalize_params(params)
83
+ # Make sure we have string keys, otherwise the sort does not work
84
+ params.inject({}) {|acc, (k,v)| acc[k.to_s] = v; acc}.sort.map do |key, value|
85
+ [CGI.escape(key), CGI.escape(value.to_s)].join('=')
86
+ end.join('&')
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,23 @@
1
+ module AmazonMwsProducts
2
+ class GetMatchingProducts
3
+ attr_reader :account, :asins
4
+
5
+ def initialize(account, asins)
6
+ @account = account
7
+ @asins = asins
8
+ end
9
+
10
+ def execute
11
+ Client.new(account, 'GetMatchingProduct').get(asin_params)
12
+ end
13
+
14
+ private
15
+ def asin_params
16
+ params = {}
17
+ asins.each_with_index do |asin, i|
18
+ params["ASINList.ASIN.#{i+1}"] = asin
19
+ end
20
+ params
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,18 @@
1
+ module AmazonMwsProducts
2
+ class ListMatchingProducts
3
+ attr_reader :account, :query
4
+
5
+ def initialize(account, query)
6
+ @account = account
7
+ @query = query
8
+ end
9
+
10
+ def execute
11
+ client.get("Query" => URI.encode(query))
12
+ end
13
+
14
+ def client
15
+ Client.new(account, 'ListMatchingProducts')
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ require 'faraday_middleware/response_middleware'
2
+
3
+ module AmazonMwsProducts
4
+ class NokogiriParserMiddleware < ::FaradayMiddleware::ResponseMiddleware
5
+ dependency 'nokogiri'
6
+
7
+ define_parser do |body|
8
+ ::Nokogiri::XML(body)
9
+ end
10
+ end
11
+ end
12
+
13
+ Faraday.register_middleware :response,
14
+ :nokogiri_parser => lambda { AmazonMwsProducts::NokogiriParserMiddleware}
@@ -0,0 +1,3 @@
1
+ module AmazonMwsProducts
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ module AmazonMwsProducts
4
+ describe GetMatchingProducts do
5
+ let(:account) do
6
+ OpenStruct.new(:seller_id => 'sellerid',
7
+ :aws_access_key_id => 'accesskey',
8
+ :marketplace_id => 'marketplaceid',
9
+ :secret_access_key => 'secret key')
10
+ end
11
+
12
+ let(:asins) {%w{B002QYOP72 B009AWSLFK B008BV6XA6}}
13
+
14
+ subject { GetMatchingProducts.new(account, asins) }
15
+
16
+ before(:each) do
17
+ stub_request(:get, %r{^https://mws.amazonservices.com/Products/2011-10-01}).
18
+ to_return(:body => "<foo>bar</foo>", :status => 200)
19
+ end
20
+
21
+ describe "#execute" do
22
+ it "builds the correct url and request parameters" do
23
+ Timecop.freeze(DateTime.new(2012, 3, 14, 15, 9, 26, Rational(-7,24))) do
24
+ subject.execute
25
+
26
+ a_request(:get, "https://mws.amazonservices.com/Products/2011-10-01").
27
+ with(:query => hash_including(
28
+ 'AWSAccessKeyId' => account.aws_access_key_id,
29
+ 'Action' => 'GetMatchingProduct',
30
+ 'SellerId' => account.seller_id,
31
+ 'SignatureVersion' => '2',
32
+ 'Timestamp' => '2012-03-14T21:09:26Z',
33
+ 'Version' => '2011-10-01',
34
+ 'SignatureMethod' => 'HmacSHA256',
35
+ 'MarketplaceId' => account.marketplace_id,
36
+ 'ASINList.ASIN.1' => asins[0],
37
+ 'ASINList.ASIN.2' => asins[1],
38
+ 'ASINList.ASIN.3' => asins[2]
39
+ )).should have_been_made.once
40
+ end
41
+ end
42
+
43
+ it "signs the request" do
44
+ Timecop.freeze(DateTime.new(2012, 3, 14, 15, 9, 26, Rational(-7,24))) do
45
+ subject.execute
46
+
47
+ sig = nil
48
+ a_request(:get, %r{https://mws.amazonservices.com/Products/2011-10-01}).with do |req|
49
+ sig = req.uri.query_values['Signature']
50
+ true
51
+ end.should have_been_made
52
+
53
+ sig.should == 'Y42l/KzBlLDfka9hFDx2QwTMJCWQsFoKA68SOgvSWx4='
54
+ end
55
+ end
56
+
57
+ it "parses the response" do
58
+ subject.execute.body.at('foo').text.should == 'bar'
59
+ end
60
+
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,56 @@
1
+ require 'spec_helper'
2
+
3
+ module AmazonMwsProducts
4
+ describe ListMatchingProducts do
5
+ let(:account) do
6
+ OpenStruct.new(:seller_id => 'sellerid',
7
+ :aws_access_key_id => 'accesskey',
8
+ :marketplace_id => 'marketplaceid',
9
+ :secret_access_key => 'secret key')
10
+ end
11
+
12
+ let(:query) { "harry potter dvd" }
13
+
14
+ subject { ListMatchingProducts.new(account, query) }
15
+
16
+ before(:each) do
17
+ stub_request(:get, %r{^https://mws.amazonservices.com/Products/2011-10-01}).
18
+ to_return(:body => "resp body", :status => 200)
19
+ end
20
+
21
+ describe "#execute" do
22
+ it "builds the correct url and request parameters" do
23
+ Timecop.freeze(DateTime.new(2012, 3, 14, 15, 9, 26, Rational(-7,24))) do
24
+ subject.execute
25
+
26
+ a_request(:get, "https://mws.amazonservices.com/Products/2011-10-01").
27
+ with(:query => hash_including(
28
+ 'AWSAccessKeyId' => account.aws_access_key_id,
29
+ 'Action' => 'ListMatchingProducts',
30
+ 'SellerId' => account.seller_id,
31
+ 'SignatureVersion' => '2',
32
+ 'Timestamp' => '2012-03-14T21:09:26Z',
33
+ 'Version' => '2011-10-01',
34
+ 'SignatureMethod' => 'HmacSHA256',
35
+ 'MarketplaceId' => account.marketplace_id,
36
+ 'Query' => "harry%20potter%20dvd"
37
+ )).should have_been_made.once
38
+ end
39
+ end
40
+
41
+ it "signs the request" do
42
+ Timecop.freeze(DateTime.new(2012, 3, 14, 15, 9, 26, Rational(-7,24))) do
43
+ subject.execute
44
+
45
+ sig = nil
46
+ a_request(:get, %r{https://mws.amazonservices.com/Products/2011-10-01}).with do |req|
47
+ sig = req.uri.query_values['Signature']
48
+ true
49
+ end.should have_been_made
50
+
51
+ sig.should == 'kMBqDjSPb8hLxTWAb6Tg6iQYW5huO4qRBgC ZfI86iQ='
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,17 @@
1
+ # This file was generated by the `rspec --init` command. Conventionally, all
2
+ # specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
3
+ # Require this file using `require "spec_helper.rb"` to ensure that it is only
4
+ # loaded once.
5
+ #
6
+ # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
7
+ RSpec.configure do |config|
8
+ config.treat_symbols_as_metadata_keys_with_true_values = true
9
+ config.run_all_when_everything_filtered = true
10
+ config.filter_run :focus
11
+ end
12
+
13
+ require_relative '../lib/amazon_mws_products'
14
+
15
+ require 'timecop'
16
+ require 'webmock/rspec'
17
+ require 'ostruct'
metadata ADDED
@@ -0,0 +1,214 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: amazon_mws_products
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Donald Plummer
9
+ - Michael Xavier
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2013-03-08 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ prerelease: false
17
+ type: :runtime
18
+ name: faraday
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0.8'
25
+ requirement: !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ! '>='
29
+ - !ruby/object:Gem::Version
30
+ version: '0.8'
31
+ - !ruby/object:Gem::Dependency
32
+ prerelease: false
33
+ type: :runtime
34
+ name: faraday_middleware
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirement: !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ! '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ prerelease: false
49
+ type: :runtime
50
+ name: nokogiri
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
56
+ version: '0'
57
+ requirement: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ - !ruby/object:Gem::Dependency
64
+ prerelease: false
65
+ type: :development
66
+ name: rspec
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ~>
71
+ - !ruby/object:Gem::Version
72
+ version: 2.9.0
73
+ requirement: !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ~>
77
+ - !ruby/object:Gem::Version
78
+ version: 2.9.0
79
+ - !ruby/object:Gem::Dependency
80
+ prerelease: false
81
+ type: :development
82
+ name: guard
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ requirement: !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ - !ruby/object:Gem::Dependency
96
+ prerelease: false
97
+ type: :development
98
+ name: guard-rspec
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ! '>='
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ requirement: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ prerelease: false
113
+ type: :development
114
+ name: timecop
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
121
+ requirement: !ruby/object:Gem::Requirement
122
+ none: false
123
+ requirements:
124
+ - - ! '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ - !ruby/object:Gem::Dependency
128
+ prerelease: false
129
+ type: :development
130
+ name: webmock
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirement: !ruby/object:Gem::Requirement
138
+ none: false
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ - !ruby/object:Gem::Dependency
144
+ prerelease: false
145
+ type: :development
146
+ name: pry
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ! '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ requirement: !ruby/object:Gem::Requirement
154
+ none: false
155
+ requirements:
156
+ - - ! '>='
157
+ - !ruby/object:Gem::Version
158
+ version: '0'
159
+ description: A client for AmazonMWS Products API
160
+ email:
161
+ - donald.plummer@gmail.com
162
+ - michael@michaelxavier.net
163
+ executables: []
164
+ extensions: []
165
+ extra_rdoc_files: []
166
+ files:
167
+ - .gitignore
168
+ - .rspec
169
+ - .rvmrc
170
+ - Gemfile
171
+ - Guardfile
172
+ - LICENSE.txt
173
+ - README.md
174
+ - Rakefile
175
+ - amazon_mws_products.gemspec
176
+ - examples/list_matching_products.rb
177
+ - lib/amazon_mws_products.rb
178
+ - lib/amazon_mws_products/client.rb
179
+ - lib/amazon_mws_products/get_matching_products.rb
180
+ - lib/amazon_mws_products/list_matching_products.rb
181
+ - lib/amazon_mws_products/nokogiri_parser_middleware.rb
182
+ - lib/amazon_mws_products/version.rb
183
+ - spec/amazon_mws_products/get_matching_products_spec.rb
184
+ - spec/amazon_mws_products/list_matching_products_spec.rb
185
+ - spec/spec_helper.rb
186
+ homepage: https://github.com/dplummer/amazon_mws_products
187
+ licenses: []
188
+ post_install_message:
189
+ rdoc_options: []
190
+ require_paths:
191
+ - lib
192
+ required_ruby_version: !ruby/object:Gem::Requirement
193
+ none: false
194
+ requirements:
195
+ - - ! '>='
196
+ - !ruby/object:Gem::Version
197
+ version: '0'
198
+ required_rubygems_version: !ruby/object:Gem::Requirement
199
+ none: false
200
+ requirements:
201
+ - - ! '>='
202
+ - !ruby/object:Gem::Version
203
+ version: '0'
204
+ requirements: []
205
+ rubyforge_project:
206
+ rubygems_version: 1.8.25
207
+ signing_key:
208
+ specification_version: 3
209
+ summary: A client for AmazonMWS Products API
210
+ test_files:
211
+ - spec/amazon_mws_products/get_matching_products_spec.rb
212
+ - spec/amazon_mws_products/list_matching_products_spec.rb
213
+ - spec/spec_helper.rb
214
+ has_rdoc: