amazon-associates 0.6.3 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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"