amazon-album-art 0.1.1 → 0.3.0

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/Gemfile CHANGED
@@ -3,10 +3,6 @@ source "http://rubygems.org"
3
3
  # Example:
4
4
  # gem "activesupport", ">= 2.3.5"
5
5
 
6
- # gem 'nokogiri', '>= 1.4.4'
7
- # gem 'sucker', '>= 1.1.4'
8
-
9
-
10
6
  # Add dependencies to develop your gem here.
11
7
  # Include everything needed to run rake, tests, features, etc.
12
8
  group :development do
@@ -14,4 +10,6 @@ group :development do
14
10
  gem "bundler", "~> 1.0.0"
15
11
  gem "jeweler", "~> 1.5.2"
16
12
  gem "rcov", ">= 0"
13
+ gem 'nokogiri', '>= 1.4.4'
14
+ gem 'sucker', '>= 1.1.4'
17
15
  end
data/Gemfile.lock CHANGED
@@ -1,14 +1,21 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
+ activesupport (3.0.3)
5
+ curb (0.7.9)
4
6
  git (1.2.5)
5
7
  jeweler (1.5.2)
6
8
  bundler (~> 1.0.0)
7
9
  git (>= 1.2.5)
8
10
  rake
11
+ nokogiri (1.4.4)
9
12
  rake (0.8.7)
10
13
  rcov (0.9.9)
11
14
  shoulda (2.11.3)
15
+ sucker (1.1.4)
16
+ activesupport (>= 2.3.2)
17
+ curb (~> 0.7.0)
18
+ nokogiri (~> 1.4.0)
12
19
 
13
20
  PLATFORMS
14
21
  ruby
@@ -16,5 +23,7 @@ PLATFORMS
16
23
  DEPENDENCIES
17
24
  bundler (~> 1.0.0)
18
25
  jeweler (~> 1.5.2)
26
+ nokogiri (>= 1.4.4)
19
27
  rcov
20
28
  shoulda
29
+ sucker (>= 1.1.4)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.1
1
+ 0.3.0
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{amazon-album-art}
8
- s.version = "0.1.1"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["John Allen"]
12
- s.date = %q{2011-01-13}
12
+ s.date = %q{2011-01-17}
13
13
  s.description = %q{A specialized Amazon AWS gem for finding Album Art running on top of the 'sucker' gem}
14
14
  s.email = %q{john@threedogconsulting.com}
15
15
  s.extra_rdoc_files = [
@@ -49,6 +49,8 @@ Gem::Specification.new do |s|
49
49
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
50
50
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
51
51
  s.add_development_dependency(%q<rcov>, [">= 0"])
52
+ s.add_development_dependency(%q<nokogiri>, [">= 1.4.4"])
53
+ s.add_development_dependency(%q<sucker>, [">= 1.1.4"])
52
54
  s.add_runtime_dependency(%q<nokogiri>, [">= 1.4.4"])
53
55
  s.add_runtime_dependency(%q<sucker>, [">= 1.1.4"])
54
56
  else
@@ -58,6 +60,8 @@ Gem::Specification.new do |s|
58
60
  s.add_dependency(%q<rcov>, [">= 0"])
59
61
  s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
60
62
  s.add_dependency(%q<sucker>, [">= 1.1.4"])
63
+ s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
64
+ s.add_dependency(%q<sucker>, [">= 1.1.4"])
61
65
  end
62
66
  else
63
67
  s.add_dependency(%q<shoulda>, [">= 0"])
@@ -66,6 +70,8 @@ Gem::Specification.new do |s|
66
70
  s.add_dependency(%q<rcov>, [">= 0"])
67
71
  s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
68
72
  s.add_dependency(%q<sucker>, [">= 1.1.4"])
73
+ s.add_dependency(%q<nokogiri>, [">= 1.4.4"])
74
+ s.add_dependency(%q<sucker>, [">= 1.1.4"])
69
75
  end
70
76
  end
71
77
 
@@ -34,15 +34,18 @@ module AmazonAlbumArt
34
34
  results = @worker.get
35
35
 
36
36
  # Make sure nothing went awry.
37
- raise AmazonAlbumArtError.new("Error finding album") unless results.valid?
37
+ check_response(results, "Error finding album")
38
38
 
39
39
  # Now parse it.
40
40
  results.map("Item") do |match|
41
- attribs = match['ItemAttributes']
42
-
43
- # grab values that were returned
44
- found_artist, found_album = (attribs['Artist'] ||= attribs['Author'] ||= attribs["Creator"]["__content__"]), match['ItemAttributes']['Title']
45
-
41
+ begin
42
+ attribs = match['ItemAttributes']
43
+ # grab values that were returned
44
+ found_artist, found_album = (attribs['Artist'] ||= attribs['Author'] ||= (attribs.has_key?("Creator") ? attribs["Creator"]["__content__"] : "")), match['ItemAttributes']['Title']
45
+ rescue StandardError => bang
46
+ # getting unhandled error from Sucker in some cases
47
+ next
48
+ end
46
49
  # check to see if we have a reasonable match
47
50
  next unless !found_album.blank? && !found_artist.blank? && matches?(album, found_album) && matches?(artist, found_artist)
48
51
 
@@ -61,22 +64,16 @@ module AmazonAlbumArt
61
64
  images = @worker.get
62
65
 
63
66
  # Make sure nothing went awry.
64
- raise AmazonAlbumArtError.new("Error finding images") unless images.valid?
67
+ check_response(results, "Error finding images")
65
68
 
66
69
  # parse response
67
70
  doc = Nokogiri::XML.parse(images.body)
68
71
 
69
- urls = {}
70
-
71
- # build the hash with requested values
72
- sizes.each do |size|
73
- urls.merge!({ size => doc.css("Item > ImageSets > ImageSet[@Category=\"primary\"] > #{size.to_s.capitalize}Image > URL").text })
74
- end
75
-
76
- return { :artist => found_artist, :album => found_album, :images => urls }
72
+ return { :artist => found_artist, :album => found_album, :images => load_images(doc, sizes) }
77
73
  end
78
74
  end
79
75
 
76
+ private
80
77
  def matches?(s1, s2, tolerance = 2)
81
78
  s1 == s2 ||
82
79
  s1 =~ /#{Regexp.escape s2}/i ||
@@ -103,6 +100,19 @@ module AmazonAlbumArt
103
100
  end
104
101
  return x
105
102
  end
103
+
104
+ def load_images(doc, sizes)
105
+ # build the hash with requested values
106
+ {}.tap do |urls|
107
+ sizes.each do |size|
108
+ urls.merge!({ size => doc.css("Item > ImageSets > ImageSet[@Category=\"primary\"] > #{size.to_s.capitalize}Image > URL").text })
109
+ end
110
+ end
111
+ end
112
+
113
+ def check_response(results, msg)
114
+ raise AmazonAlbumArtError.new(msg) unless results.valid? || results.find("Error").size > 0
115
+ end
106
116
  end
107
117
 
108
118
  class AmazonAlbumArtError < StandardError
data/test/helper.rb CHANGED
@@ -16,10 +16,9 @@ require 'amazon-album-art'
16
16
 
17
17
  class Test::Unit::TestCase
18
18
  def api_key
19
- 'test_key'
19
+ 'api-key'
20
20
  end
21
-
22
21
  def secret_key
23
- 'secret_key'
22
+ "secret-key"
24
23
  end
25
24
  end
@@ -2,65 +2,75 @@ require 'helper'
2
2
 
3
3
  class TestAmazonAlbumArt < Test::Unit::TestCase
4
4
  context "amazon-album-art module" do
5
- should "create a new client" do
6
- c = AmazonAlbumArt.new(api_key, secret_key)
7
- assert_equal AmazonAlbumArt::Client, c.class
8
- end
5
+ should "create a new client" do
6
+ c = AmazonAlbumArt.new(api_key, secret_key)
7
+ assert_equal AmazonAlbumArt::Client, c.class
9
8
  end
10
- context "using the amazon-amazon-art client" do
11
- setup do
12
- @client = AmazonAlbumArt.new(api_key, secret_key)
13
- end
14
- context "search for known items" do
15
- context "and for all images sizes" do
16
- setup do
17
- @result = @client.search("phish", "rift")
18
- end
19
- should "return a hash" do
20
- assert_kind_of Hash, @result
21
- end
22
- should "include the found artists name" do
23
- assert_equal "Phish", @result[:artist]
24
- end
25
- should "include the found artists name" do
26
- assert_equal "Rift", @result[:album]
27
- end
28
- should "include an images key" do
29
- assert @result.has_key?(:images)
30
- end
31
- setup do
32
- @images = @result[:images]
33
- end
34
- should "include include all image sizes" do
35
- [:swatch, :small, :thumbnail, :tiny, :medium, :large].each do |key|
36
- assert @images.has_key?(key)
37
- end
38
- end
9
+ end
10
+ context "using the amazon-amazon-art client" do
11
+ setup do
12
+ @client = AmazonAlbumArt.new(api_key, secret_key)
13
+ end
14
+ context "search for known items" do
15
+ context "and for all images sizes" do
16
+ setup do
17
+ @result = @client.search("phish", "rift")
39
18
  end
40
- context "and just a medium search" do
41
- setup do
42
- @result = @client.search("phish", "rift", [:medium])
43
- end
44
- context "just a medium image" do
45
- should "include a medium image url" do
46
- assert_equal "http://ecx.images-amazon.com/images/I/511RmbQV7dL._SL160_.jpg", @result[:images][:medium]
47
- end
19
+ should "return a hash" do
20
+ assert_kind_of Hash, @result
21
+ end
22
+ should "include the found artists name" do
23
+ assert_equal "Phish", @result[:artist]
24
+ end
25
+ should "include the found artists name" do
26
+ assert_equal "Rift", @result[:album]
27
+ end
28
+ should "include an images key" do
29
+ assert @result.has_key?(:images)
30
+ end
31
+ setup do
32
+ @images = @result[:images]
33
+ end
34
+ should "include include all image sizes" do
35
+ [:swatch, :small, :thumbnail, :tiny, :medium, :large].each do |key|
36
+ assert @images.has_key?(key)
48
37
  end
49
38
  end
50
- context "no search values" do
51
- should "raise an ArgumentError" do
52
- assert_raise ArgumentError do
53
- @client.search
54
- end
39
+ end
40
+ context "and just a medium search" do
41
+ setup do
42
+ @result = @client.search("phish", "rift", [:medium])
43
+ end
44
+ context "just a medium image" do
45
+ should "include a medium image url" do
46
+ assert_equal "http://ecx.images-amazon.com/images/I/511RmbQV7dL._SL160_.jpg", @result[:images][:medium]
55
47
  end
56
48
  end
57
49
  end
58
50
  end
59
- context "no keys" do
60
- should "raise an ArgumentError" do
61
- assert_raise ArgumentError do
62
- AmazonAlbumArt.new
51
+ context "search for problematic items" do
52
+ setup do
53
+ @result = @client.search("Mya", "A Cinderella Story")
54
+ end
55
+ context "found something for mya" do
56
+ should "not be nil" do
57
+ assert_not_nil @result
58
+ end
59
+ end
60
+ context "no search values" do
61
+ should "raise an ArgumentError" do
62
+ assert_raise ArgumentError do
63
+ @client.search
64
+ end
63
65
  end
64
66
  end
65
67
  end
68
+ end
69
+ context "no keys" do
70
+ should "raise an ArgumentError" do
71
+ assert_raise ArgumentError do
72
+ AmazonAlbumArt.new
73
+ end
74
+ end
75
+ end
66
76
  end
metadata CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
4
4
  prerelease: false
5
5
  segments:
6
6
  - 0
7
- - 1
8
- - 1
9
- version: 0.1.1
7
+ - 3
8
+ - 0
9
+ version: 0.3.0
10
10
  platform: ruby
11
11
  authors:
12
12
  - John Allen
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-13 00:00:00 -05:00
17
+ date: 2011-01-17 00:00:00 -05:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -85,7 +85,7 @@ dependencies:
85
85
  - 4
86
86
  - 4
87
87
  version: 1.4.4
88
- type: :runtime
88
+ type: :development
89
89
  prerelease: false
90
90
  version_requirements: *id005
91
91
  - !ruby/object:Gem::Dependency
@@ -100,9 +100,39 @@ dependencies:
100
100
  - 1
101
101
  - 4
102
102
  version: 1.1.4
103
- type: :runtime
103
+ type: :development
104
104
  prerelease: false
105
105
  version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: nokogiri
108
+ requirement: &id007 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ segments:
114
+ - 1
115
+ - 4
116
+ - 4
117
+ version: 1.4.4
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: sucker
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ segments:
129
+ - 1
130
+ - 1
131
+ - 4
132
+ version: 1.1.4
133
+ type: :runtime
134
+ prerelease: false
135
+ version_requirements: *id008
106
136
  description: A specialized Amazon AWS gem for finding Album Art running on top of the 'sucker' gem
107
137
  email: john@threedogconsulting.com
108
138
  executables: []
@@ -139,7 +169,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
139
169
  requirements:
140
170
  - - ">="
141
171
  - !ruby/object:Gem::Version
142
- hash: -4281510954553603032
172
+ hash: -2297918951107509842
143
173
  segments:
144
174
  - 0
145
175
  version: "0"