amazon-associates 0.6.3 → 0.7.0

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/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 0.7.0 pending
2
+ ----------------
3
+ * Update to ruby 1.9 compatibility
4
+ * Update to rspec 2
5
+ * Make Item an ActiveModel object
6
+
1
7
  0.6.3 2010-08-16
2
8
  ----------------
3
9
  * Update gem dependencies
data/Rakefile CHANGED
@@ -8,12 +8,14 @@ Jeweler::Tasks.new do |s|
8
8
  s.homepage = "http://github.com/Empact/amazon-associates"
9
9
  s.description = "amazon-associates offers object-oriented access to the Amazon Associates API, built on ROXML"
10
10
  s.authors = ["Ben Woosley", "Dan Pickett", "Herryanto Siatono"]
11
- s.add_runtime_dependency("roxml", ">= 3.1.3")
11
+ s.add_runtime_dependency("roxml", ">= 3.1.6")
12
+ s.add_runtime_dependency("activemodel", ">= 3.0.0")
12
13
  s.add_runtime_dependency("activesupport", ">= 2.3.4")
13
14
  s.add_runtime_dependency("ruby-hmac")
14
15
  s.add_runtime_dependency("will_paginate")
15
16
  s.add_development_dependency("thoughtbot-shoulda")
16
17
  s.add_development_dependency("mocha")
18
+ s.add_development_dependency("rspec", ">= 2.0.0")
17
19
 
18
20
  # s.require_path = "lib"
19
21
  # s.autorequire = "amazon-associates"
@@ -39,16 +41,17 @@ Rake::TestTask.new(:test) do |t|
39
41
  t.verbose = true
40
42
  end
41
43
 
42
- require 'spec/rake/spectask'
43
- Spec::Rake::SpecTask.new(:spec) do |t|
44
- t.libs << 'lib' << 'spec'
45
- t.spec_opts << '--format profile --backtrace'
46
- t.spec_files = FileList['spec/**/*_spec.rb']
44
+ require 'rspec/core/rake_task'
45
+ RSpec::Core::RakeTask.new(:spec) do |t|
46
+ t.ruby_opts = '-Ilib -Ispec'
47
+ t.rspec_opts = '--backtrace'
48
+ # t.spec_files = FileList['spec/**/*_spec.rb']
47
49
  end
48
50
 
49
- Spec::Rake::SpecTask.new(:rcov) do |t|
50
- t.libs << 'lib' << 'spec'
51
- t.spec_files = FileList['spec/**/*_spec.rb']
51
+ RSpec::Core::RakeTask.new(:rcov) do |t|
52
+ t.ruby_opts = '-Ilib -Ispec'
53
+ t.rspec_opts = '--backtrace'
54
+ # t.spec_files = FileList['spec/**/*_spec.rb']
52
55
  t.rcov = true
53
56
  end
54
57
 
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
+ :minor: 7
4
+ :patch: 0
3
5
  :build:
4
- :minor: 6
5
- :patch: 3
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{amazon-associates}
8
- s.version = "0.6.3"
8
+ s.version = "0.7.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Ben Woosley", "Dan Pickett", "Herryanto Siatono"]
12
- s.date = %q{2010-08-16}
12
+ s.date = %q{2010-11-03}
13
13
  s.description = %q{amazon-associates offers object-oriented access to the Amazon Associates API, built on ROXML}
14
14
  s.email = %q{ben.woosley@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -92,27 +92,33 @@ Gem::Specification.new do |s|
92
92
  s.specification_version = 3
93
93
 
94
94
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
95
- s.add_runtime_dependency(%q<roxml>, [">= 3.1.3"])
95
+ s.add_runtime_dependency(%q<roxml>, [">= 3.1.6"])
96
+ s.add_runtime_dependency(%q<activemodel>, [">= 3.0.0"])
96
97
  s.add_runtime_dependency(%q<activesupport>, [">= 2.3.4"])
97
98
  s.add_runtime_dependency(%q<ruby-hmac>, [">= 0"])
98
99
  s.add_runtime_dependency(%q<will_paginate>, [">= 0"])
99
100
  s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
100
101
  s.add_development_dependency(%q<mocha>, [">= 0"])
102
+ s.add_development_dependency(%q<rspec>, [">= 2.0.0"])
101
103
  else
102
- s.add_dependency(%q<roxml>, [">= 3.1.3"])
104
+ s.add_dependency(%q<roxml>, [">= 3.1.6"])
105
+ s.add_dependency(%q<activemodel>, [">= 3.0.0"])
103
106
  s.add_dependency(%q<activesupport>, [">= 2.3.4"])
104
107
  s.add_dependency(%q<ruby-hmac>, [">= 0"])
105
108
  s.add_dependency(%q<will_paginate>, [">= 0"])
106
109
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
107
110
  s.add_dependency(%q<mocha>, [">= 0"])
111
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
108
112
  end
109
113
  else
110
- s.add_dependency(%q<roxml>, [">= 3.1.3"])
114
+ s.add_dependency(%q<roxml>, [">= 3.1.6"])
115
+ s.add_dependency(%q<activemodel>, [">= 3.0.0"])
111
116
  s.add_dependency(%q<activesupport>, [">= 2.3.4"])
112
117
  s.add_dependency(%q<ruby-hmac>, [">= 0"])
113
118
  s.add_dependency(%q<will_paginate>, [">= 0"])
114
119
  s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
115
120
  s.add_dependency(%q<mocha>, [">= 0"])
121
+ s.add_dependency(%q<rspec>, [">= 2.0.0"])
116
122
  end
117
123
  end
118
124
 
@@ -1,5 +1,7 @@
1
- require 'rubygems'
2
1
  require 'active_support'
2
+ require 'active_support/core_ext/enumerable'
3
+
4
+ require 'active_model'
3
5
 
4
6
  class Object # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.html
5
7
  def meta_def name, &blk
@@ -8,12 +10,11 @@ class Object # http://whytheluckystiff.net/articles/seeingMetaclassesClearly.htm
8
10
  end
9
11
 
10
12
  class OpenHash < Hash
11
- def method_missing_with_attributes_query(meth, *args)
13
+ def method_missing(meth, *args)
12
14
  fetch(meth) do
13
- method_missing_without_attributes_query(meth)
15
+ super
14
16
  end
15
17
  end
16
- alias_method_chain :method_missing, :attributes_query
17
18
  end
18
19
 
19
20
  class Float
@@ -37,7 +37,7 @@ module Amazon
37
37
  request_url = prepare_url(opts)
38
38
  response = nil
39
39
 
40
- if cacheable?(opts['Operation'])
40
+ if cache_it = cacheable?(opts[:operation])
41
41
  FilesystemCache.sweep
42
42
 
43
43
  response = FilesystemCache.get(request_url)
@@ -50,10 +50,10 @@ module Amazon
50
50
  unless response.kind_of? Net::HTTPSuccess
51
51
  raise RequestError, "HTTP Response: #{response.inspect}"
52
52
  end
53
- cache_response(request_url, response) if cacheable?(opts['Operation'])
53
+ cache_response(request_url, response) if cache_it
54
54
  end
55
55
 
56
- doc = ROXML::XML::Parser.parse(response.body).root
56
+ doc = ROXML::XML::Node.from(response.body)
57
57
  eval(doc.name).from_xml(doc, request_url)
58
58
  end
59
59
 
@@ -108,12 +108,10 @@ module Amazon
108
108
  raise opts.inspect if opts.has_key?(:cart)
109
109
  opts.assert_valid_keys(*valid_arguments(opts[:operation]))
110
110
 
111
- params = opts.each_pair do |k, v|
112
- opts.delete(k)
111
+ params = Hash[opts.map do |(k, v)|
113
112
  v *= ',' if v.is_a? Array
114
- opts[k.to_s.camelize] = v.to_s
115
- params
116
- end
113
+ [k.to_s.camelize, v.to_s]
114
+ end]
117
115
 
118
116
  params.merge!(
119
117
  'Service' => 'AWSECommerceService',
@@ -122,7 +120,7 @@ module Amazon
122
120
  'SignatureMethod' => "HmacSHA256"
123
121
  )
124
122
 
125
- unsigned_uri = URI.parse("http://webservices.amazon.#{tld(opts.delete("Country"))}/onca/xml?#{params.sort { |a, b| a[0] <=> b[0] }.map { |key, val| "#{key}=#{CGI::escape(val).gsub('+', '%20')}" }.join("&")}")
123
+ unsigned_uri = URI.parse("http://ecs.amazonaws.#{tld(opts.delete("Country"))}/onca/xml?#{params.sort { |a, b| a[0] <=> b[0] }.map { |key, val| "#{key}=#{CGI::escape(val).gsub('+', '%20')}" }.join("&")}")
126
124
  hmac = HMAC::SHA256.new(ENV['AMAZON_SECRET_ACCESS_KEY'])
127
125
  hmac.update("GET\n#{unsigned_uri.host}\n#{unsigned_uri.path}\n#{unsigned_uri.query}")
128
126
  "#{unsigned_uri}&Signature=#{CGI::escape(Base64.encode64(hmac.digest).chomp)}"
@@ -6,7 +6,7 @@ module Amazon
6
6
  xml_name 'Item'
7
7
 
8
8
  xml_reader :asin, :from => 'ASIN'
9
- xml_reader :detail_page_url
9
+ xml_reader :detail_page_url, :from => 'DetailPageURL'
10
10
  xml_reader :list_price, :as => Price, :in => 'xmlns:ItemAttributes'
11
11
  xml_reader :attributes, :as => {:key => :name,
12
12
  :value => :content}, :in => 'xmlns:ItemAttributes'
@@ -31,7 +31,22 @@ module Amazon
31
31
  xml_reader :publisher, :studio, :batteries_included?, :label, :brand, :in => 'xmlns:ItemAttributes'
32
32
 
33
33
  xml_reader :editorial_reviews, :as => [EditorialReview]
34
- xml_reader :customer_reviews, :as => [CustomerReview]
34
+ xml_reader :customer_reviews, :as => [CustomerReview], :in => 'xmlns:CustomerReviews'
35
+ xml_reader :features, :as => [], :in => 'xmlns:ItemAttributes'
36
+
37
+ alias_method :id, :asin
38
+
39
+ extend ActiveModel::Naming
40
+ include ActiveModel::Conversion
41
+ include ActiveModel::Validations
42
+
43
+ def persisted?
44
+ true
45
+ end
46
+
47
+ def amazon_product_description
48
+ editorial_reviews.detect {|r| r.source == 'Amazon.com Product Description' }.try(:content)
49
+ end
35
50
 
36
51
  def ==(other)
37
52
  asin == other.asin
@@ -45,8 +60,6 @@ module Amazon
45
60
  authors.only
46
61
  end
47
62
 
48
- alias_method :offer_price, :lowest_new_price
49
-
50
63
  def title
51
64
  root_title || attr_title
52
65
  end
@@ -139,11 +152,12 @@ module Amazon
139
152
  DEFAULT_RESPONSE_GROUPS = SMALL_RESPONSE_GROUPS + %w{Offers VariationSummary BrowseNodes}
140
153
 
141
154
  def self.prep_responses(opts)
142
- opts[:response_group] ||= []
143
- unless opts[:response_group].is_a? Array
144
- raise ArgumentError, "Response groups are required to be in array form"
155
+ opts[:response_group]
156
+ if opts[:response_group]
157
+ Array.wrap(opts[:response_group])
158
+ else
159
+ DEFAULT_RESPONSE_GROUPS
145
160
  end
146
- opts[:response_group] += DEFAULT_RESPONSE_GROUPS
147
161
  end
148
162
  end
149
163
 
@@ -18,7 +18,7 @@ module Amazon
18
18
  units = @value == 1 ? @units.singularize : @units
19
19
  [value, units].join(' ')
20
20
  end
21
- alias_attribute :inspect, :to_s
21
+ alias :inspect :to_s
22
22
 
23
23
  def to_i
24
24
  @value.round
@@ -14,7 +14,7 @@ module Amazon
14
14
  def to_s
15
15
  @value.ordinalize
16
16
  end
17
- alias_attribute :inspect, :to_s
17
+ alias :inspect :to_s
18
18
 
19
19
  def ==(other)
20
20
  @value == other
@@ -10,7 +10,7 @@ module Amazon
10
10
 
11
11
  def initialize(str = nil, cents = nil, currency = nil)
12
12
  @to_s = str.to_s
13
- @cents = Integer(cents)
13
+ @cents = cents ? Integer(cents) : 0
14
14
  @currency = currency.to_s
15
15
  end
16
16
 
@@ -1,6 +1,6 @@
1
- require "lib/amazon-associates"
1
+ require File.join(File.dirname(__FILE__), "../lib/amazon-associates")
2
2
 
3
- describe "Amazon Associates response", :shared => true do
3
+ shared_examples_for "Amazon Associates response" do
4
4
  describe "request" do
5
5
  subject { @response.request }
6
6
  it { should be_valid }
@@ -12,7 +12,7 @@ module Amazon
12
12
  @existing_cart = Cart.create(@potter => 1, @batman => 3)
13
13
  end
14
14
 
15
- describe "a cart", :shared => true do
15
+ shared_examples_for "a cart" do
16
16
  it "should have a valid purchase_url" do
17
17
  @cart.purchase_url.should_not be_blank
18
18
  end
@@ -33,7 +33,7 @@ module Amazon
33
33
  end
34
34
  end
35
35
 
36
- describe "a valid cart", :shared => true do
36
+ shared_examples_for "a valid cart" do
37
37
  it_should_behave_like "a cart"
38
38
 
39
39
  it "should be in a valid state" do
@@ -41,7 +41,7 @@ module Amazon
41
41
  end
42
42
  end
43
43
 
44
- describe "a modified cart", :shared => true do
44
+ shared_examples_for "a modified cart" do
45
45
  it_should_behave_like "a cart"
46
46
 
47
47
  it "should be in a valid state" do
@@ -121,7 +121,7 @@ module Amazon
121
121
  end
122
122
 
123
123
  describe ".get" do
124
- describe "gotten cart", :shared => true do
124
+ shared_examples_for "gotten cart" do
125
125
  subject { @cart }
126
126
 
127
127
  it { should == @existing_cart }
@@ -203,7 +203,7 @@ module Amazon
203
203
  end
204
204
  end
205
205
 
206
- context "adding an existing item", :shared => true do
206
+ shared_examples_for "adding an existing item" do
207
207
  context "before save" do
208
208
  it_should_behave_like "a modified cart"
209
209
 
@@ -12,14 +12,14 @@ module Amazon
12
12
  @item.should == Struct.new(:asin).new(asin)
13
13
  end
14
14
 
15
- describe "query for items", :shared => true do
15
+ shared_examples_for "query for items" do
16
16
  it "should return a list of items" do
17
17
  @result.should have_at_least(10).items
18
18
  @result.each {|item| item.should be_an_instance_of(Item) }
19
19
  end
20
20
  end
21
21
 
22
- describe "query for related items", :shared => true do
22
+ shared_examples_for "query for related items" do
23
23
  it_should_behave_like "query for items"
24
24
  it "should not include the item related to the result" do
25
25
  @result.should_not include(@item)
@@ -1,6 +1,6 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
2
 
3
- describe "measurement object", :shared => true do
3
+ shared_examples_for "measurement object" do
4
4
  it "should take a quantity and units" do
5
5
  m = measurement_with(:value => 11.3, :units => 'inches')
6
6
  m.value.should == 11.3
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/../test_helper"
1
+ require_relative "./../test_helper"
2
2
 
3
3
  class Amazon::Associates::BrowseNodeLookupTest < Test::Unit::TestCase
4
4
  include FilesystemTestHelper
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/../test_helper"
1
+ require_relative "./../test_helper"
2
2
 
3
3
  module Amazon
4
4
  module Associates
@@ -1,4 +1,4 @@
1
- require File.dirname(__FILE__) + "/../../test_helper"
1
+ require_relative "./../../test_helper"
2
2
 
3
3
  module Amazon
4
4
  module Associates
@@ -84,7 +84,7 @@ class FilesystemCacheTest < Test::Unit::TestCase
84
84
  should "create a file in the cache path with the response inside it" do
85
85
  open(File.join(CACHE_TEST_PATH + @filename[0..2], @filename)) do |f|
86
86
  response = Marshal.load(f)
87
- equivalent = eval(ROXML::XML::Parser.parse(response.body).root.name).from_xml(response.body, @resp.url)
87
+ equivalent = eval(ROXML::XML::Node.from(response.body).name).from_xml(response.body, @resp.url)
88
88
 
89
89
  assert_equal @resp, equivalent
90
90
  end
@@ -1,7 +1,16 @@
1
- require File.join(File.dirname(__FILE__), '../test_helper')
1
+ # encoding: utf-8
2
+ require_relative '../test_helper'
2
3
 
3
4
  module Amazon
4
5
  module Associates
6
+ class ItemActiveModelTest < Test::Unit::TestCase
7
+ include ActiveModel::Lint::Tests
8
+
9
+ def setup
10
+ @model = Amazon::Associates.item_search('ruby').items.first
11
+ end
12
+ end
13
+
5
14
  class ItemTest < Test::Unit::TestCase
6
15
  include FilesystemTestHelper
7
16
 
@@ -32,7 +41,7 @@ module Amazon
32
41
  def test_item_search_with_paging
33
42
  resp = Amazon::Associates.item_search('ruby', :item_page => 2)
34
43
  assert resp.request.valid?
35
- assert 2, resp.current_page
44
+ assert_equal 2, resp.current_page
36
45
  end
37
46
 
38
47
  def test_item_search_with_response_group_array
@@ -173,7 +182,7 @@ module Amazon
173
182
 
174
183
  assert_equal "Programming Ruby: The Pragmatic Programmers' Guide, Second Edition", item.attributes['Title']
175
184
  assert item.authors.is_a?(Array)
176
- assert 3, item.authors.size
185
+ assert_equal 3, item.authors.size
177
186
  assert_equal "Dave Thomas", item.authors.first
178
187
  end
179
188
  end
@@ -197,7 +206,7 @@ module Amazon
197
206
  def test_item_search_with_paging
198
207
  resp = Amazon::Associates.item_search("ruby", :item_page => 2)
199
208
  assert resp.request.valid?, resp.inspect
200
- assert 2, resp.current_page
209
+ assert_equal 2, resp.current_page
201
210
  end
202
211
 
203
212
  def test_item_search_with_no_result
@@ -261,7 +270,7 @@ module Amazon
261
270
 
262
271
  assert_equal "Programming Ruby: The Pragmatic Programmers' Guide, Second Edition", title
263
272
  assert authors.is_a?(Array)
264
- assert 3, authors.size
273
+ assert_equal 3, authors.size
265
274
  assert_equal "Dave Thomas", authors.first
266
275
  end
267
276
  end
@@ -32,4 +32,4 @@ protected
32
32
  #remove all the cache files
33
33
  FileUtils.rm_rf(@path)
34
34
  end
35
- end
35
+ end
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amazon-associates
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
- - 6
9
- - 3
10
- version: 0.6.3
7
+ - 7
8
+ - 0
9
+ version: 0.7.0
11
10
  platform: ruby
12
11
  authors:
13
12
  - Ben Woosley
@@ -17,7 +16,7 @@ autorequire:
17
16
  bindir: bin
18
17
  cert_chain: []
19
18
 
20
- date: 2010-08-16 00:00:00 -04:00
19
+ date: 2010-11-03 00:00:00 -07:00
21
20
  default_executable:
22
21
  dependencies:
23
22
  - !ruby/object:Gem::Dependency
@@ -28,86 +27,110 @@ dependencies:
28
27
  requirements:
29
28
  - - ">="
30
29
  - !ruby/object:Gem::Version
31
- hash: 5
32
30
  segments:
33
31
  - 3
34
32
  - 1
35
- - 3
36
- version: 3.1.3
33
+ - 6
34
+ version: 3.1.6
37
35
  type: :runtime
38
36
  version_requirements: *id001
39
37
  - !ruby/object:Gem::Dependency
40
- name: activesupport
38
+ name: activemodel
41
39
  prerelease: false
42
40
  requirement: &id002 !ruby/object:Gem::Requirement
43
41
  none: false
44
42
  requirements:
45
43
  - - ">="
46
44
  - !ruby/object:Gem::Version
47
- hash: 11
45
+ segments:
46
+ - 3
47
+ - 0
48
+ - 0
49
+ version: 3.0.0
50
+ type: :runtime
51
+ version_requirements: *id002
52
+ - !ruby/object:Gem::Dependency
53
+ name: activesupport
54
+ prerelease: false
55
+ requirement: &id003 !ruby/object:Gem::Requirement
56
+ none: false
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
48
60
  segments:
49
61
  - 2
50
62
  - 3
51
63
  - 4
52
64
  version: 2.3.4
53
65
  type: :runtime
54
- version_requirements: *id002
66
+ version_requirements: *id003
55
67
  - !ruby/object:Gem::Dependency
56
68
  name: ruby-hmac
57
69
  prerelease: false
58
- requirement: &id003 !ruby/object:Gem::Requirement
70
+ requirement: &id004 !ruby/object:Gem::Requirement
59
71
  none: false
60
72
  requirements:
61
73
  - - ">="
62
74
  - !ruby/object:Gem::Version
63
- hash: 3
64
75
  segments:
65
76
  - 0
66
77
  version: "0"
67
78
  type: :runtime
68
- version_requirements: *id003
79
+ version_requirements: *id004
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: will_paginate
71
82
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
83
+ requirement: &id005 !ruby/object:Gem::Requirement
73
84
  none: false
74
85
  requirements:
75
86
  - - ">="
76
87
  - !ruby/object:Gem::Version
77
- hash: 3
78
88
  segments:
79
89
  - 0
80
90
  version: "0"
81
91
  type: :runtime
82
- version_requirements: *id004
92
+ version_requirements: *id005
83
93
  - !ruby/object:Gem::Dependency
84
94
  name: thoughtbot-shoulda
85
95
  prerelease: false
86
- requirement: &id005 !ruby/object:Gem::Requirement
96
+ requirement: &id006 !ruby/object:Gem::Requirement
87
97
  none: false
88
98
  requirements:
89
99
  - - ">="
90
100
  - !ruby/object:Gem::Version
91
- hash: 3
92
101
  segments:
93
102
  - 0
94
103
  version: "0"
95
104
  type: :development
96
- version_requirements: *id005
105
+ version_requirements: *id006
97
106
  - !ruby/object:Gem::Dependency
98
107
  name: mocha
99
108
  prerelease: false
100
- requirement: &id006 !ruby/object:Gem::Requirement
109
+ requirement: &id007 !ruby/object:Gem::Requirement
101
110
  none: false
102
111
  requirements:
103
112
  - - ">="
104
113
  - !ruby/object:Gem::Version
105
- hash: 3
106
114
  segments:
107
115
  - 0
108
116
  version: "0"
109
117
  type: :development
110
- version_requirements: *id006
118
+ version_requirements: *id007
119
+ - !ruby/object:Gem::Dependency
120
+ name: rspec
121
+ prerelease: false
122
+ requirement: &id008 !ruby/object:Gem::Requirement
123
+ none: false
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ segments:
128
+ - 2
129
+ - 0
130
+ - 0
131
+ version: 2.0.0
132
+ type: :development
133
+ version_requirements: *id008
111
134
  description: amazon-associates offers object-oriented access to the Amazon Associates API, built on ROXML
112
135
  email: ben.woosley@gmail.com
113
136
  executables: []
@@ -181,7 +204,6 @@ required_ruby_version: !ruby/object:Gem::Requirement
181
204
  requirements:
182
205
  - - ">="
183
206
  - !ruby/object:Gem::Version
184
- hash: 3
185
207
  segments:
186
208
  - 0
187
209
  version: "0"
@@ -190,7 +212,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
190
212
  requirements:
191
213
  - - ">="
192
214
  - !ruby/object:Gem::Version
193
- hash: 3
194
215
  segments:
195
216
  - 0
196
217
  version: "0"