dpickett-amazon_associate 0.6.2 → 0.6.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|