acts_as_amazon_product 1.1 → 1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/acts_as_amazon_product.rb +10 -7
- data/test/acts_as_amazon_product_test.rb +17 -1
- data/test/config-example.yml +1 -1
- data/test/test.db +0 -0
- metadata +49 -43
- data/test/foo.rb +0 -7
@@ -21,16 +21,18 @@ module Netphase
|
|
21
21
|
:asin => 'asin',
|
22
22
|
:name => 'name',
|
23
23
|
:access_key => ENV['AMAZON_ACCESS_KEY_ID'],
|
24
|
-
:associate_tag => ENV['AMAZON_ASSOCIATE_TAG']
|
24
|
+
:associate_tag => ENV['AMAZON_ASSOCIATE_TAG'],
|
25
|
+
:search_index => 'Books'
|
25
26
|
}
|
26
27
|
options = defaults.merge options
|
27
28
|
|
28
29
|
Amazon::Ecs.options = {:aWS_access_key_id => options[:access_key], :associate_tag => options[:associate_tag] }
|
29
30
|
|
30
31
|
write_inheritable_attribute(:amazon_asin, options[:asin])
|
31
|
-
write_inheritable_attribute(:amazon_name, options[:name])
|
32
|
+
write_inheritable_attribute(:amazon_name, options[:name])
|
33
|
+
write_inheritable_attribute(:amazon_search_index, options[:search_index])
|
32
34
|
write_inheritable_attribute(:amazon_associate_key, options[:associate_key])
|
33
|
-
class_inheritable_reader :amazon_asin, :amazon_name, :amazon_associate_key
|
35
|
+
class_inheritable_reader :amazon_asin, :amazon_name, :amazon_search_index, :amazon_associate_key
|
34
36
|
|
35
37
|
has_one :amazon_product, :as => :amazonable #, :dependent => :delete
|
36
38
|
include Netphase::Acts::Amazonable::InstanceMethods
|
@@ -51,20 +53,21 @@ module Netphase
|
|
51
53
|
if self.amazon_product.nil?
|
52
54
|
asin = (self.respond_to?('amazon_asin')) ? self.send(self.amazon_asin) : nil
|
53
55
|
name = (self.respond_to?('amazon_name')) ? self.send(self.amazon_name) : nil
|
56
|
+
search_index = (self.respond_to?('amazon_search_index')) ? self.amazon_search_index : 'Books'
|
54
57
|
|
55
58
|
if !asin.nil? && asin.length > 0
|
56
|
-
#puts "Looking up #{asin}"
|
59
|
+
# puts "Looking up #{asin}"
|
57
60
|
res = Amazon::Ecs.item_lookup(self.send(self.amazon_asin), :response_group => 'Medium')
|
58
61
|
|
59
62
|
self.amazon_product =
|
60
63
|
AmazonProduct.new(:xml => res.doc.to_html, :asin => res.doc.at('asin').inner_html)
|
61
64
|
self.amazon_product.save
|
62
65
|
elsif !name.nil? && name.length > 0
|
63
|
-
#puts "Searching for #{name}"
|
64
|
-
res = Amazon::Ecs.item_search(self.send(self.amazon_name), :response_group => 'Medium') #, :sort => 'salesrank'
|
66
|
+
# puts "Searching for #{name}"
|
67
|
+
res = Amazon::Ecs.item_search(self.send(self.amazon_name), :search_index => self.amazon_search_index, :response_group => 'Medium') #, :sort => 'salesrank'
|
65
68
|
res = res.doc.at('items/item')
|
66
69
|
self.amazon_product =
|
67
|
-
AmazonProduct.new(:xml => res.to_html, :asin => res.at('itemattributes/isbn').inner_html)
|
70
|
+
AmazonProduct.new(:xml => res.to_html, :asin => (res.at('itemattributes/isbn').nil? ? res.at('asin').inner_html : res.at('itemattributes/isbn').inner_html))
|
68
71
|
self.amazon_product.save
|
69
72
|
else
|
70
73
|
logger.error "No known attributes to search by"
|
@@ -27,6 +27,11 @@ ActiveRecord::Base.connection.create_table :movies do |t|
|
|
27
27
|
t.column :asin, :string
|
28
28
|
end
|
29
29
|
|
30
|
+
ActiveRecord::Base.connection.create_table :magazines do |t|
|
31
|
+
t.column :name, :string
|
32
|
+
t.column :asin, :string
|
33
|
+
end
|
34
|
+
|
30
35
|
ActiveRecord::Base.connection.create_table :amazon_products do |t| # , :id => false
|
31
36
|
t.column :asin, :string
|
32
37
|
t.column :xml, :text
|
@@ -45,6 +50,10 @@ class Movie < ActiveRecord::Base
|
|
45
50
|
acts_as_amazon_product
|
46
51
|
end
|
47
52
|
|
53
|
+
class Magazine < ActiveRecord::Base
|
54
|
+
acts_as_amazon_product :search_index => 'Magazines'
|
55
|
+
end
|
56
|
+
|
48
57
|
AmazonProduct.delete_all
|
49
58
|
|
50
59
|
class ActAsAmazonProductTest < Test::Unit::TestCase
|
@@ -55,6 +64,8 @@ class ActAsAmazonProductTest < Test::Unit::TestCase
|
|
55
64
|
@book_ror = Book.create(:title => 'Rails Recipes')
|
56
65
|
@book_perl = Book.create(:title => 'Perl')
|
57
66
|
@movie_dh = Movie.create(:name=>'Live Free or Die Hard', :asin=>'B000VNMMRA')
|
67
|
+
Magazine.delete_all
|
68
|
+
@mag_lci = Magazine.create(:name => 'La Cucina Italiana')
|
58
69
|
end
|
59
70
|
|
60
71
|
def test_isbn
|
@@ -67,9 +78,14 @@ class ActAsAmazonProductTest < Test::Unit::TestCase
|
|
67
78
|
assert_equal("Getting Things Done: The Art of Stress-Free Productivity", @book_gtd.amazon.title)
|
68
79
|
end
|
69
80
|
|
81
|
+
def test_magazine
|
82
|
+
assert_not_nil(@mag_lci.amazon)
|
83
|
+
assert_equal("B00009XFML", @mag_lci.amazon.asin)
|
84
|
+
end
|
85
|
+
|
70
86
|
def test_small_image
|
71
87
|
assert_not_nil(@book_gtd.amazon)
|
72
|
-
assert_match(/
|
88
|
+
assert_match(/4104N6ME70L\._SL75_\.jpg/, @book_gtd.amazon.small_image_url)
|
73
89
|
end
|
74
90
|
|
75
91
|
def test_author
|
data/test/config-example.yml
CHANGED
data/test/test.db
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,61 +1,67 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.0
|
3
|
-
specification_version: 1
|
4
2
|
name: acts_as_amazon_product
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: "1.
|
7
|
-
date: 2007-11-03 00:00:00 -04:00
|
8
|
-
summary: A package for simplifying use of the Amazon/ECS API
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: scott@netphase.com
|
12
|
-
homepage:
|
13
|
-
rubyforge_project:
|
14
|
-
description:
|
15
|
-
autorequire: acts_as_amazon_product
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: "1.2"
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Scott Nedderman
|
8
|
+
autorequire: acts_as_amazon_product
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-04-24 00:00:00 -04:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: amazon-ecs
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 0.5.1
|
23
|
+
version:
|
24
|
+
description:
|
25
|
+
email: scott@netphase.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README
|
31
32
|
files:
|
32
33
|
- lib/acts_as_amazon_product.rb
|
33
34
|
- lib/amazon_product.rb
|
34
35
|
- test/acts_as_amazon_product_test.rb
|
35
36
|
- test/config-example.yml
|
36
37
|
- test/example.rb
|
37
|
-
- test/foo.rb
|
38
38
|
- test/test.db
|
39
39
|
- README
|
40
|
-
|
41
|
-
|
40
|
+
has_rdoc: true
|
41
|
+
homepage:
|
42
|
+
post_install_message:
|
42
43
|
rdoc_options: []
|
43
44
|
|
44
|
-
|
45
|
-
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
requirements:
|
49
|
+
- - ">="
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: "0"
|
52
|
+
version:
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
version: "0"
|
58
|
+
version:
|
50
59
|
requirements: []
|
51
60
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.5.1
|
61
|
-
version:
|
61
|
+
rubyforge_project:
|
62
|
+
rubygems_version: 0.9.5
|
63
|
+
signing_key:
|
64
|
+
specification_version: 2
|
65
|
+
summary: A package for simplifying use of the Amazon/ECS API
|
66
|
+
test_files: []
|
67
|
+
|