acts_as_amazon_product 1.2 → 1.3

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,27 +1,29 @@
1
1
  = ActsAsAmazonProduct
2
2
 
3
- This "acts_as" module makes it extremely simple to add Amazon integration to an existing model.
3
+ This "acts_as" module makes it extremely simple to add Amazon integration to an
4
+ existing model.
4
5
 
5
6
  == Setup
6
7
 
7
- This code does not require changing any current database tables. It only requires adding one migration for a single new table used to cache responses from Amazon:
8
+ This code does not require changing any current database tables. It only requires
9
+ adding one migration for a single new table used to cache responses from Amazon.
10
+ Run the following to create the migration:
8
11
 
9
- ActiveRecord::Base.connection.create_table :amazon_products do |t|
10
- t.column :asin, :string
11
- t.column :xml, :text
12
- t.column :created_at, :datetime, :null => false
13
- t.column :amazonable_id, :integer, :default => 0, :null => false
14
- t.column :amazonable_type, :string, :limit => 15, :default => "", :null => false
15
- end
12
+ script/generate acts_as_amazon_product_migration
16
13
 
17
14
  == Using acts_as_amazon_product
18
15
 
19
- Add the "acts_as" line to your model. Only :access_key is required. The :asin and :name assignments override what attributes in your class should be used for a direct lookup (item_looup) or general search (item_search). If no value is assigned to :asin then a general search is made and the first item (sorted by salesrank) is assigned (this functionality will likely change).
16
+ Add the "acts_as" line to your model. Only :access_key is required. The :asin and
17
+ :name assignments override what attributes in your class should be used for a direct
18
+ lookup (item_looup) or general search (item_search). If no value is assigned to :asin
19
+ then a general search is made and the first item (sorted by salesrank) is assigned
20
+ (this functionality will likely change).
20
21
 
21
22
  require 'acts_as_amazon_product'
22
23
 
23
24
  class Book < ActiveRecord::Base
24
- acts_as_amazon_product :asin => 'isbn', :name => 'title', :access_key => '0123456', :associate_tag => 'assoc-20'
25
+ acts_as_amazon_product :asin => 'isbn', :name => 'title',
26
+ :access_key => '0123456', :associate_tag => 'assoc-20'
25
27
  end
26
28
 
27
29
  You can now access the Amazon data in your views like so (see):
@@ -37,12 +39,14 @@ You can now access the Amazon data in your views like so (see):
37
39
 
38
40
  == Unit tests
39
41
 
40
- There are tests you can run in the [gem]/test directory. Just create a test/config.yml from the example and run "Rake test" from the [gem] directory.
42
+ There are tests you can run in the [gem]/test directory. Just create a
43
+ test/config.yml from the example and run "Rake test" from the [gem] directory.
41
44
 
42
45
  = Credits
43
- acts_as_amazon_product was credited by Scott Nedderman and Chris Beck from netphase.com
46
+ acts_as_amazon_product was created by Scott Nedderman and Chris Beck from netphase.com
44
47
 
45
- We'd love to here how you like it. Also, if you'd like us to help out with your next project, let us know.
48
+ We'd love to here how you like it. Also, if you'd like us to help out with your next
49
+ project, let us know.
46
50
 
47
51
  http://netphase.com
48
52
 
@@ -1,54 +1,60 @@
1
1
  require 'hpricot'
2
2
 
3
3
  class AmazonProduct < ActiveRecord::Base
4
- # belongs_to :amazonable, :polymorphic => true
5
4
 
6
- def hdoc(key)
5
+ def get(key, separator = ', ')
7
6
  @doc ||= Hpricot.XML(xml)
8
- @doc.at(key).inner_html
9
- end
10
-
11
- def get(key)
12
- hdoc(key)
7
+ values = (@doc/key).collect {|e| e.inner_html }
8
+ values *= separator unless separator.nil?
9
+ values unless values.blank?
13
10
  end
14
11
 
15
12
  def isbn
16
- hdoc("itemattributes/isbn")
13
+ get("itemattributes/isbn")
17
14
  end
18
15
 
19
16
  def title
20
- hdoc("itemattributes/title")
17
+ get("itemattributes/title")
21
18
  end
22
19
 
23
20
  def author
24
- hdoc("itemattributes/author")
21
+ get("itemattributes/author")
25
22
  end
26
23
 
27
24
  def binding
28
- hdoc("itemattributes/binding")
25
+ get("itemattributes/binding")
29
26
  end
30
27
 
31
28
  def price
32
- hdoc("itemattributes/listprice/amount")
29
+ get("itemattributes/listprice/amount")
33
30
  end
34
31
 
35
32
  def pages
36
- hdoc("itemattributes/numberofpages")
33
+ get("itemattributes/numberofpages")
37
34
  end
38
35
 
39
36
  def small_image_url
40
- hdoc("smallimage/url")
37
+ get("smallimage/url")
41
38
  end
42
39
 
43
40
  def medium_image_url
44
- hdoc("mediumimage/url")
41
+ get("mediumimage/url")
45
42
  end
46
43
 
47
44
  def large_image_url
48
- hdoc("largeimage/url")
45
+ get("largeimage/url")
49
46
  end
50
47
 
51
48
  def detail_url
52
- hdoc("detailpageurl")
49
+ get("detailpageurl")
53
50
  end
51
+
52
+ def method_missing(symbol, *args)
53
+ begin
54
+ super(symbol, *args)
55
+ rescue NoMethodError
56
+ get(symbol, *args)
57
+ end
58
+ end
59
+
54
60
  end
@@ -15,6 +15,7 @@ ActiveRecord::Base.establish_connection(config["database"])
15
15
  ActiveRecord::Base.connection.drop_table :amazon_products rescue nil
16
16
  ActiveRecord::Base.connection.drop_table :books rescue nil
17
17
  ActiveRecord::Base.connection.drop_table :movies rescue nil
18
+ ActiveRecord::Base.connection.drop_table :magazines rescue nil
18
19
 
19
20
  ActiveRecord::Base.connection.create_table :books do |t|
20
21
  t.column :title, :string
@@ -47,72 +48,96 @@ class Book < ActiveRecord::Base
47
48
  end
48
49
 
49
50
  class Movie < ActiveRecord::Base
50
- acts_as_amazon_product
51
+ acts_as_amazon_product :access_key => @@access_key, :associate_tag => @@associate_tag
51
52
  end
52
53
 
53
54
  class Magazine < ActiveRecord::Base
54
- acts_as_amazon_product :search_index => 'Magazines'
55
+ acts_as_amazon_product :search_index => 'Magazines', :access_key => @@access_key,
56
+ :associate_tag => @@associate_tag
55
57
  end
56
58
 
57
59
  AmazonProduct.delete_all
58
60
 
59
61
  class ActAsAmazonProductTest < Test::Unit::TestCase
60
62
 
61
- def setup
62
- Book.delete_all
63
- @book_gtd = Book.create(:title => 'Getting Things Done', :author => 'Dude', :isbn => '0142000280')
64
- @book_ror = Book.create(:title => 'Rails Recipes')
65
- @book_perl = Book.create(:title => 'Perl')
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')
69
- end
70
-
71
- def test_isbn
72
- assert_not_nil(@book_gtd.amazon)
73
- assert_equal("0142000280", @book_gtd.amazon.isbn)
74
- end
75
-
76
- def test_title
77
- assert_not_nil(@book_gtd.amazon)
78
- assert_equal("Getting Things Done: The Art of Stress-Free Productivity", @book_gtd.amazon.title)
79
- end
80
-
81
- def test_magazine
82
- assert_not_nil(@mag_lci.amazon)
83
- assert_equal("B00009XFML", @mag_lci.amazon.asin)
84
- end
85
-
86
- def test_small_image
87
- assert_not_nil(@book_gtd.amazon)
88
- assert_match(/4104N6ME70L\._SL75_\.jpg/, @book_gtd.amazon.small_image_url)
89
- end
90
-
91
- def test_author
92
- assert_not_nil(@book_gtd.amazon)
93
- assert_equal("David Allen", @book_gtd.amazon.author)
94
- end
95
-
96
- def test_binding
97
- assert_not_nil(@book_gtd.amazon)
98
- assert_equal("Paperback", @book_gtd.amazon.binding)
99
- end
100
-
101
- def test_find_with_multiple
102
- assert_equal("Rails Recipes (Pragmatic Programmers)", @book_ror.amazon.title)
103
- assert_equal("Chad Fowler", @book_ror.amazon.author)
104
- end
105
-
106
- def test_update
107
- assert_not_nil(@book_perl.amazon)
108
- isbn = @book_perl.amazon.isbn
109
- @book_perl.title = "Websters"
110
- @book_perl.save
111
- assert_not_equal(isbn, @book_perl.amazon.isbn)
112
- end
113
-
114
- def test_product_with_all_defaults
115
- assert_not_nil(@movie_dh.amazon)
116
- assert_equal 'Bruce Willis', @movie_dh.amazon.get('itemattributes/actor')
117
- end
63
+ def setup
64
+ Book.delete_all
65
+ @book_gtd = Book.create(:title => 'Getting Things Done', :author => 'Dude', :isbn => '0142000280')
66
+ @book_ror = Book.create(:title => 'Rails Recipes')
67
+ @book_perl = Book.create(:title => 'Perl')
68
+ @movie_dh = Movie.create(:name=>'Live Free or Die Hard', :asin=>'B000VNMMRA')
69
+ Magazine.delete_all
70
+ @mag_lci = Magazine.create(:name => 'La Cucina Italiana')
71
+ end
72
+
73
+ def test_isbn
74
+ assert_not_nil(@book_gtd.amazon)
75
+ assert_equal("0142000280", @book_gtd.amazon.isbn)
76
+ end
77
+
78
+ def test_title
79
+ assert_not_nil(@book_gtd.amazon)
80
+ assert_equal("Getting Things Done: The Art of Stress-Free Productivity", @book_gtd.amazon.title)
81
+ end
82
+
83
+ def test_magazine
84
+ assert_not_nil(@mag_lci.amazon)
85
+ assert_equal("B00009XFML", @mag_lci.amazon.asin)
86
+ end
87
+
88
+ def test_small_image
89
+ assert_not_nil(@book_gtd.amazon)
90
+ assert_match(/4104N6ME70L\._SL75_\.jpg/, @book_gtd.amazon.small_image_url)
91
+ end
92
+
93
+ def test_author
94
+ assert_not_nil(@book_gtd.amazon)
95
+ assert_equal("David Allen", @book_gtd.amazon.author)
96
+ end
97
+
98
+ def test_binding
99
+ assert_not_nil(@book_gtd.amazon)
100
+ assert_equal("Paperback", @book_gtd.amazon.binding)
101
+ end
102
+
103
+ def test_find_with_multiple
104
+ assert_equal("Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps (Pragmatic Programmers)", @book_ror.amazon.title)
105
+ assert_equal("Mike Clark", @book_ror.amazon.author)
106
+ end
107
+
108
+ def test_returns_nil_if_attribute_not_found
109
+ assert_equal(nil, @book_ror.amazon.get('contributor'))
110
+ end
111
+
112
+ def test_update
113
+ assert_not_nil(@book_perl.amazon)
114
+ isbn = @book_perl.amazon.isbn
115
+ @book_perl.title = "Websters"
116
+ @book_perl.save
117
+ assert_not_equal(isbn, @book_perl.amazon.isbn)
118
+ end
119
+
120
+ def test_product_with_all_defaults
121
+ assert_not_nil(@movie_dh.amazon)
122
+ assert_equal 'Bruce Willis, Timothy Olyphant, Justin Long, Maggie Q, Cliff Curtis',
123
+ @movie_dh.amazon.get('itemattributes/actor')
124
+ end
125
+
126
+ def test_accepts_a_custom_separator
127
+ assert_equal 'Bruce Willis | Timothy Olyphant | Justin Long | Maggie Q | Cliff Curtis',
128
+ @movie_dh.amazon.get('itemattributes/actor', ' | ')
129
+ end
130
+
131
+ def test_returns_array_if_separator_is_nil
132
+ assert_equal ['Bruce Willis', 'Timothy Olyphant', 'Justin Long', 'Maggie Q', 'Cliff Curtis'],
133
+ @movie_dh.amazon.get('itemattributes/actor', nil)
134
+ end
135
+
136
+ def test_method_missing
137
+ assert_equal 'Bruce Willis, Timothy Olyphant, Justin Long, Maggie Q, Cliff Curtis', @movie_dh.amazon.actor
138
+ end
139
+
140
+ def test_method_missing_with_separator
141
+ assert_equal 'Bruce Willis | Timothy Olyphant | Justin Long | Maggie Q | Cliff Curtis', @movie_dh.amazon.actor(' | ')
142
+ end
118
143
  end
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: acts_as_amazon_product
3
3
  version: !ruby/object:Gem::Version
4
- version: "1.2"
4
+ version: "1.3"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Scott Nedderman
@@ -9,7 +9,7 @@ autorequire: acts_as_amazon_product
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-04-24 00:00:00 -04:00
12
+ date: 2008-08-11 00:00:00 -04:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency