dpickett-amazon_associate 0.6.2 → 0.6.3
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/.autotest +8 -0
- data/.project +23 -0
- data/MIT-LICENSE +21 -0
- data/Rakefile +43 -0
- data/amazon_associate.gemspec +66 -0
- data/lib/amazon_associate/request.rb +29 -9
- data/test/amazon_associate/caching_strategy/filesystem_test.rb +6 -0
- data/test/amazon_associate/cart_test.rb +31 -0
- data/test/test_helper.rb +19 -0
- data/test/utilities/filesystem_test_helper.rb +31 -0
- metadata +24 -32
data/.autotest
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
Autotest.add_hook :initialize do |at|
|
2
|
+
at.clear_mappings
|
3
|
+
|
4
|
+
at.add_mapping(%r{^test/.*_test\.rb$}) {|f, _| [f] }
|
5
|
+
at.add_mapping(%r{^lib/amazon/(.*)\.rb$}) {|_, m| ["test/#{m[1]}_test.rb"] }
|
6
|
+
at.add_mapping(%r{^test/(test_helper)\.rb$}) { at.files_matching %r{^test/.*_test\.rb$} }
|
7
|
+
at.add_mapping(%r{^lib/.*\.rb$}) { at.files_matching %r{^test/.*_test\.rb$} }
|
8
|
+
end
|
data/.project
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<projectDescription>
|
3
|
+
<name>amazon-ecs</name>
|
4
|
+
<comment></comment>
|
5
|
+
<projects>
|
6
|
+
</projects>
|
7
|
+
<buildSpec>
|
8
|
+
<buildCommand>
|
9
|
+
<name>org.rubypeople.rdt.core.rubybuilder</name>
|
10
|
+
<arguments>
|
11
|
+
</arguments>
|
12
|
+
</buildCommand>
|
13
|
+
<buildCommand>
|
14
|
+
<name>com.ibm.etools.validation.validationbuilder</name>
|
15
|
+
<arguments>
|
16
|
+
</arguments>
|
17
|
+
</buildCommand>
|
18
|
+
</buildSpec>
|
19
|
+
<natures>
|
20
|
+
<nature>org.radrails.rails.ui.railsnature</nature>
|
21
|
+
<nature>org.rubypeople.rdt.core.rubynature</nature>
|
22
|
+
</natures>
|
23
|
+
</projectDescription>
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Copyright (c) 2008 Dan Pickett, Enlight Solutions
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "rake"
|
3
|
+
require "rake/testtask"
|
4
|
+
require "rake/rdoctask"
|
5
|
+
require "rake/gempackagetask"
|
6
|
+
require "date"
|
7
|
+
|
8
|
+
desc "Run unit tests."
|
9
|
+
task :default => :test
|
10
|
+
|
11
|
+
desc "Test the amazon_associate library."
|
12
|
+
Rake::TestTask.new(:test) do |t|
|
13
|
+
t.libs << "test"
|
14
|
+
t.test_files = FileList["test/**/*test.rb"]
|
15
|
+
t.verbose = true
|
16
|
+
t.warning = true
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Generate documentation for the factory_girl plugin."
|
20
|
+
Rake::RDocTask.new(:rdoc) do |rdoc|
|
21
|
+
rdoc.rdoc_dir = "rdoc"
|
22
|
+
rdoc.title = "amazon_associate"
|
23
|
+
rdoc.options << "--line-numbers" << "--inline-source" << "--main" << "README.textile"
|
24
|
+
rdoc.rdoc_files.include("README", "CHANGELOG")
|
25
|
+
rdoc.rdoc_files.include("lib/**/*.rb")
|
26
|
+
end
|
27
|
+
|
28
|
+
begin
|
29
|
+
require 'jeweler'
|
30
|
+
Jeweler::Tasks.new do |gemspec|
|
31
|
+
gemspec.name = "amazon_associate"
|
32
|
+
gemspec.summary = "Amazon Associates API Interface using Hpricot"
|
33
|
+
gemspec.email = "dpickett@enlightsolutions.com"
|
34
|
+
gemspec.homepage = "http://github.com/dpickett/amazon_associate"
|
35
|
+
gemspec.description = "TODO"
|
36
|
+
gemspec.authors = ["Dan Pickett"]
|
37
|
+
end
|
38
|
+
rescue LoadError
|
39
|
+
puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
|
40
|
+
end
|
41
|
+
|
42
|
+
desc "Clean files generated by rake tasks"
|
43
|
+
task :clobber => [:clobber_rdoc, :clobber_package]
|
@@ -0,0 +1,66 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = %q{amazon_associate}
|
5
|
+
s.version = "0.6.3"
|
6
|
+
|
7
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
|
+
s.authors = ["Dan Pickett"]
|
9
|
+
s.date = %q{2009-05-15}
|
10
|
+
s.description = %q{TODO}
|
11
|
+
s.email = %q{dpickett@enlightsolutions.com}
|
12
|
+
s.extra_rdoc_files = [
|
13
|
+
"README"
|
14
|
+
]
|
15
|
+
s.files = [
|
16
|
+
".autotest",
|
17
|
+
".project",
|
18
|
+
"CHANGELOG",
|
19
|
+
"MIT-LICENSE",
|
20
|
+
"README",
|
21
|
+
"Rakefile",
|
22
|
+
"amazon_associate.gemspec",
|
23
|
+
"lib/amazon_associate.rb",
|
24
|
+
"lib/amazon_associate/cache_factory.rb",
|
25
|
+
"lib/amazon_associate/caching_strategy.rb",
|
26
|
+
"lib/amazon_associate/caching_strategy/base.rb",
|
27
|
+
"lib/amazon_associate/caching_strategy/filesystem.rb",
|
28
|
+
"lib/amazon_associate/configuration_error.rb",
|
29
|
+
"lib/amazon_associate/element.rb",
|
30
|
+
"lib/amazon_associate/request.rb",
|
31
|
+
"lib/amazon_associate/request_error.rb",
|
32
|
+
"lib/amazon_associate/response.rb",
|
33
|
+
"test/amazon_associate/browse_node_lookup_test.rb",
|
34
|
+
"test/amazon_associate/cache_test.rb",
|
35
|
+
"test/amazon_associate/caching_strategy/filesystem_test.rb",
|
36
|
+
"test/amazon_associate/cart_test.rb",
|
37
|
+
"test/amazon_associate/request_test.rb",
|
38
|
+
"test/test_helper.rb",
|
39
|
+
"test/utilities/filesystem_test_helper.rb"
|
40
|
+
]
|
41
|
+
s.has_rdoc = true
|
42
|
+
s.homepage = %q{http://github.com/dpickett/amazon_associate}
|
43
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
44
|
+
s.require_paths = ["lib"]
|
45
|
+
s.rubygems_version = %q{1.3.2}
|
46
|
+
s.summary = %q{Amazon Associates API Interface using Hpricot}
|
47
|
+
s.test_files = [
|
48
|
+
"test/amazon_associate/browse_node_lookup_test.rb",
|
49
|
+
"test/amazon_associate/cache_test.rb",
|
50
|
+
"test/amazon_associate/caching_strategy/filesystem_test.rb",
|
51
|
+
"test/amazon_associate/cart_test.rb",
|
52
|
+
"test/amazon_associate/request_test.rb",
|
53
|
+
"test/test_helper.rb",
|
54
|
+
"test/utilities/filesystem_test_helper.rb"
|
55
|
+
]
|
56
|
+
|
57
|
+
if s.respond_to? :specification_version then
|
58
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
59
|
+
s.specification_version = 3
|
60
|
+
|
61
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
62
|
+
else
|
63
|
+
end
|
64
|
+
else
|
65
|
+
end
|
66
|
+
end
|
@@ -97,28 +97,47 @@ module AmazonAssociate
|
|
97
97
|
# Item.ASIN.Quantity defaults to 1, unless otherwise specified in _opts_
|
98
98
|
|
99
99
|
# Creates remote shopping cart containing _asin_
|
100
|
-
def self.cart_create(
|
100
|
+
def self.cart_create(items, opts = {})
|
101
101
|
opts = self.options.merge(opts) if self.options
|
102
102
|
opts[:operation] = "CartCreate"
|
103
|
-
|
104
|
-
|
103
|
+
|
104
|
+
if items.is_a?(String)
|
105
|
+
asin = items
|
106
|
+
opts["Item.#{asin}.Quantity"] = opts[:quantity] || 1
|
107
|
+
opts["Item.#{asin}.ASIN"] = asin
|
108
|
+
else
|
109
|
+
items.each do |item|
|
110
|
+
(item[:offer_listing_id].nil? || item[:offer_listing_id].empty?) ? opts["Item.#{item[:asin]}.ASIN"] = item[:asin] : opts["Item.#{item[:asin]}.OfferListingId"] = item[:offer_listing_id]
|
111
|
+
opts["Item.#{item[:asin]}.Quantity"] = item[:quantity] || 1
|
112
|
+
end
|
113
|
+
end
|
105
114
|
|
106
115
|
self.send_request(opts)
|
107
116
|
end
|
108
117
|
|
109
|
-
# Adds
|
110
|
-
def self.cart_add(
|
118
|
+
# Adds items to remote shopping cart
|
119
|
+
def self.cart_add(items, cart_id, hmac, opts = {})
|
111
120
|
opts = self.options.merge(opts) if self.options
|
112
121
|
opts[:operation] = "CartAdd"
|
113
|
-
|
114
|
-
|
122
|
+
|
123
|
+
if items.is_a?(String)
|
124
|
+
asin = items
|
125
|
+
opts["Item.#{asin}.Quantity"] = opts[:quantity] || 1
|
126
|
+
opts["Item.#{asin}.ASIN"] = asin
|
127
|
+
else
|
128
|
+
items.each do |item|
|
129
|
+
(item[:offer_listing_id].nil? || item[:offer_listing_id].empty?) ? opts["Item.#{item[:asin]}.ASIN"] = item[:asin] : opts["Item.#{item[:asin]}.OfferListingId"] = item[:offer_listing_id]
|
130
|
+
opts["Item.#{item[:asin]}.Quantity"] = item[:quantity] || 1
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
115
134
|
opts[:cart_id] = cart_id
|
116
135
|
opts[:hMAC] = hmac
|
117
136
|
|
118
137
|
self.send_request(opts)
|
119
138
|
end
|
120
139
|
|
121
|
-
#
|
140
|
+
# Retrieve a remote shopping cart
|
122
141
|
def self.cart_get(cart_id, hmac, opts = {})
|
123
142
|
opts = self.options.merge(opts) if self.options
|
124
143
|
opts[:operation] = "CartGet"
|
@@ -255,6 +274,7 @@ module AmazonAssociate
|
|
255
274
|
qs = ""
|
256
275
|
opts.each {|k,v|
|
257
276
|
next unless v
|
277
|
+
next if [:caching_options, :caching_strategy].include?(k)
|
258
278
|
v = v.join(",") if v.is_a? Array
|
259
279
|
qs << "&#{camelize(k.to_s)}=#{URI.encode(v.to_s)}"
|
260
280
|
}
|
@@ -273,4 +293,4 @@ module AmazonAssociate
|
|
273
293
|
AmazonAssociate::CacheFactory.cache(request, response, options)
|
274
294
|
end
|
275
295
|
end
|
276
|
-
end
|
296
|
+
end
|
@@ -88,6 +88,12 @@ class AmazonAssociate::CachingStrategy::FilesystemTest < Test::Unit::TestCase
|
|
88
88
|
assert FileTest.exists?(File.join(@@cache_path + @filename[0..2], @filename))
|
89
89
|
assert_equal @resp.doc.to_s, File.read(File.join(@@cache_path + @filename[0..2], @filename)).chomp
|
90
90
|
end
|
91
|
+
|
92
|
+
should "not send cache parameters in the request" do
|
93
|
+
[:caching_strategy].each do |param|
|
94
|
+
assert_no_match /#{param.to_s}/, @resp.request_url
|
95
|
+
end
|
96
|
+
end
|
91
97
|
end
|
92
98
|
|
93
99
|
context "getting a cached request" do
|
@@ -55,4 +55,35 @@ class AmazonAssociate::CartTest < Test::Unit::TestCase
|
|
55
55
|
assert_not_nil resp.doc.get_elements_by_tag_name("hmac").inner_text
|
56
56
|
end
|
57
57
|
|
58
|
+
# Test cart_create with an array of hashes representing multiple items
|
59
|
+
def test_cart_create_with_multiple_items
|
60
|
+
items = [ { :asin => "0974514055", :quantity => 2 }, { :asin => "0672328844", :quantity => 3 } ]
|
61
|
+
resp = AmazonAssociate::Request.cart_create(items)
|
62
|
+
assert resp.is_valid_request?
|
63
|
+
first_item, second_item = resp.items.reverse[0], resp.items.reverse[1]
|
64
|
+
|
65
|
+
assert_equal items[0][:asin], first_item.get("asin")
|
66
|
+
assert_equal items[0][:quantity].to_s, first_item.get("quantity")
|
67
|
+
|
68
|
+
assert_equal items[1][:asin], second_item.get("asin")
|
69
|
+
assert_equal items[1][:quantity].to_s, second_item.get("quantity")
|
70
|
+
|
71
|
+
assert_not_nil resp.doc.get_elements_by_tag_name("cartid").inner_text
|
72
|
+
assert_not_nil resp.doc.get_elements_by_tag_name("hmac").inner_text
|
73
|
+
end
|
74
|
+
|
75
|
+
# Test cart_create with offer_listing_id instead of asin
|
76
|
+
def test_cart_create_with_offer_listing_id
|
77
|
+
items = [ { :offer_listing_id => "MCK%2FnCXIges8tpX%2B222nOYEqeZ4AzbrFyiHuP6pFf45N3vZHTm8hFTytRF%2FLRONNkVmt182%2BmeX72n%2BbtUcGEtpLN92Oy9Y7", :quantity => 2 } ]
|
78
|
+
resp = AmazonAssociate::Request.cart_create(items)
|
79
|
+
assert resp.is_valid_request?
|
80
|
+
first_item = resp.items.first
|
81
|
+
|
82
|
+
assert_equal items[0][:offer_listing_id], first_item.get("offerlistingid")
|
83
|
+
assert_equal items[0][:quantity].to_s, first_item.get("quantity")
|
84
|
+
|
85
|
+
assert_not_nil resp.doc.get_elements_by_tag_name("cartid").inner_text
|
86
|
+
assert_not_nil resp.doc.get_elements_by_tag_name("hmac").inner_text
|
87
|
+
end
|
88
|
+
|
58
89
|
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "rubygems"
|
2
|
+
require "test/unit"
|
3
|
+
require "shoulda"
|
4
|
+
require "mocha"
|
5
|
+
|
6
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__) , '..', 'lib'))
|
7
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__) , 'utilities'))
|
8
|
+
require "filesystem_test_helper"
|
9
|
+
require 'amazon_associate'
|
10
|
+
|
11
|
+
|
12
|
+
AmazonAssociate::Request.configure do |options|
|
13
|
+
options[:aWS_access_key_id] = ""
|
14
|
+
|
15
|
+
#raise exception if user has not entered their access key
|
16
|
+
if options[:aWS_access_key_id] == ""
|
17
|
+
raise "Access key is not entered - enter an access key in test_helper.rb if you'd like to run tests"
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module FilesystemTestHelper
|
2
|
+
@@cache_path = File.dirname(__FILE__) + "/cache/"
|
3
|
+
|
4
|
+
protected
|
5
|
+
def get_valid_caching_options
|
6
|
+
#configure Amazon library for filesystem caching
|
7
|
+
AmazonAssociate::Request.configure do |options|
|
8
|
+
options[:caching_strategy] = :filesystem
|
9
|
+
options[:caching_options] = {:cache_path => @@cache_path}
|
10
|
+
options[:disk_quota] = 200
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy_caching_options
|
15
|
+
#reset caching to off
|
16
|
+
AmazonAssociate::Request.configure do |options|
|
17
|
+
options[:caching_strategy] = nil
|
18
|
+
options[:caching_options] = nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def get_cache_directory
|
23
|
+
#make the caching directory
|
24
|
+
FileUtils.makedirs(@@cache_path)
|
25
|
+
end
|
26
|
+
|
27
|
+
def destroy_cache_directory
|
28
|
+
#remove all the cache files
|
29
|
+
FileUtils.rm_rf(@@cache_path)
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,66 +1,56 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dpickett-amazon_associate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Pickett
|
8
|
-
|
9
|
-
autorequire: amazon_associate
|
8
|
+
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
11
|
|
13
|
-
date:
|
12
|
+
date: 2009-05-15 00:00:00 -07:00
|
14
13
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: "0.6"
|
24
|
-
version:
|
25
|
-
description:
|
26
|
-
email:
|
27
|
-
- dpickett@enlightsolutions.com
|
28
|
-
- herryanto@pluitsolutions.com
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: TODO
|
17
|
+
email: dpickett@enlightsolutions.com
|
29
18
|
executables: []
|
30
19
|
|
31
20
|
extensions: []
|
32
21
|
|
33
22
|
extra_rdoc_files:
|
34
23
|
- README
|
35
|
-
- CHANGELOG
|
36
24
|
files:
|
37
|
-
-
|
25
|
+
- .autotest
|
26
|
+
- .project
|
27
|
+
- CHANGELOG
|
28
|
+
- MIT-LICENSE
|
29
|
+
- README
|
30
|
+
- Rakefile
|
31
|
+
- amazon_associate.gemspec
|
32
|
+
- lib/amazon_associate.rb
|
38
33
|
- lib/amazon_associate/cache_factory.rb
|
39
|
-
- lib/amazon_associate/caching_strategy
|
34
|
+
- lib/amazon_associate/caching_strategy.rb
|
40
35
|
- lib/amazon_associate/caching_strategy/base.rb
|
41
36
|
- lib/amazon_associate/caching_strategy/filesystem.rb
|
42
|
-
- lib/amazon_associate/caching_strategy.rb
|
43
37
|
- lib/amazon_associate/configuration_error.rb
|
44
38
|
- lib/amazon_associate/element.rb
|
45
39
|
- lib/amazon_associate/request.rb
|
46
40
|
- lib/amazon_associate/request_error.rb
|
47
41
|
- lib/amazon_associate/response.rb
|
48
|
-
- lib/amazon_associate.rb
|
49
42
|
- test/amazon_associate/browse_node_lookup_test.rb
|
50
43
|
- test/amazon_associate/cache_test.rb
|
51
44
|
- test/amazon_associate/caching_strategy/filesystem_test.rb
|
52
45
|
- test/amazon_associate/cart_test.rb
|
53
46
|
- test/amazon_associate/request_test.rb
|
54
|
-
-
|
55
|
-
-
|
47
|
+
- test/test_helper.rb
|
48
|
+
- test/utilities/filesystem_test_helper.rb
|
56
49
|
has_rdoc: true
|
57
|
-
homepage: http://github.com/dpickett/amazon_associate
|
50
|
+
homepage: http://github.com/dpickett/amazon_associate
|
58
51
|
post_install_message:
|
59
52
|
rdoc_options:
|
60
|
-
- --
|
61
|
-
- --inline-source
|
62
|
-
- --main
|
63
|
-
- README
|
53
|
+
- --charset=UTF-8
|
64
54
|
require_paths:
|
65
55
|
- lib
|
66
56
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -80,11 +70,13 @@ requirements: []
|
|
80
70
|
rubyforge_project:
|
81
71
|
rubygems_version: 1.2.0
|
82
72
|
signing_key:
|
83
|
-
specification_version:
|
84
|
-
summary:
|
73
|
+
specification_version: 3
|
74
|
+
summary: Amazon Associates API Interface using Hpricot
|
85
75
|
test_files:
|
86
76
|
- test/amazon_associate/browse_node_lookup_test.rb
|
87
77
|
- test/amazon_associate/cache_test.rb
|
88
78
|
- test/amazon_associate/caching_strategy/filesystem_test.rb
|
89
79
|
- test/amazon_associate/cart_test.rb
|
90
80
|
- test/amazon_associate/request_test.rb
|
81
|
+
- test/test_helper.rb
|
82
|
+
- test/utilities/filesystem_test_helper.rb
|