itunes 0.3.0 → 0.4.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/.gitignore +5 -0
- data/.rspec +3 -0
- data/Gemfile +3 -0
- data/README.md +56 -44
- data/Rakefile +19 -0
- data/itunes.gemspec +43 -0
- data/lib/faraday/rashify.rb +30 -0
- data/lib/itunes.rb +20 -67
- data/lib/itunes/client.rb +26 -0
- data/lib/itunes/client/lookup.rb +21 -0
- data/lib/itunes/client/search.rb +81 -0
- data/lib/itunes/configuration.rb +56 -0
- data/lib/itunes/request.rb +30 -0
- data/lib/itunes/version.rb +2 -2
- data/spec/faraday/rashify_spec.rb +17 -0
- data/spec/fixtures/Faraday_Response_Rashify.yml +46 -0
- data/spec/fixtures/ITunes.yml +906 -0
- data/spec/fixtures/ITunes_Client.yml +936 -0
- data/spec/itunes/client_spec.rb +164 -0
- data/spec/itunes_spec.rb +55 -0
- data/spec/spec_helper.rb +20 -0
- metadata +242 -14
@@ -0,0 +1,164 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe ITunes::Client do
|
4
|
+
|
5
|
+
use_vcr_cassette :record => :new_episodes, :match_requests_on => [:uri, :method]
|
6
|
+
|
7
|
+
describe ".lookup" do
|
8
|
+
before(:each) do
|
9
|
+
@client = ITunes::Client.new
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should return results for valid ids" do
|
13
|
+
item = @client.lookup('396405320')
|
14
|
+
item.results.first.collection_name.should == 'Hold it Down - Single'
|
15
|
+
item.results.first.primary_genre_name == 'Dance'
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "when using amg ids" do
|
19
|
+
describe "artist ids" do
|
20
|
+
it "should return a valid item when passed a single id" do
|
21
|
+
items = @client.lookup('468749', :id_type => :amg_artist)
|
22
|
+
items.result_count.should == 2
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should return a results when passed a comma separated string of ids" do
|
26
|
+
items = @client.lookup('468749,5723', :id_type => :amg_artist)
|
27
|
+
items.result_count.should == 3
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should return results when passed an array of ids" do
|
31
|
+
items = @client.lookup(['468749','5723'], :id_type => :amg_artist)
|
32
|
+
items.result_count.should == 3
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
describe "album ids" do
|
38
|
+
it "should return a valid item when passed a single id" do
|
39
|
+
items = @client.lookup('15197', :id_type => :amg_album)
|
40
|
+
items.results.first.artist_name.should == 'Wilson Pickett'
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should return a results when passed a comma separated string of ids" do
|
44
|
+
items = @client.lookup('15197,15198', :id_type => :amg_album)
|
45
|
+
items.results.first.artist_name.should == 'Wilson Pickett'
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should return results when passed an array of ids" do
|
49
|
+
items = @client.lookup(['15197','15198'], :id_type => :amg_album)
|
50
|
+
items.results.first.artist_name.should == 'Wilson Pickett'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
describe "when using a upc id" do
|
56
|
+
it "should return a valid item when passed a single id" do
|
57
|
+
items = @client.lookup('075678317729', :id_type => :upc)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "when passing an id_type other than amg or upc" do
|
62
|
+
it "should raise an error" do
|
63
|
+
lambda {
|
64
|
+
@client.lookup('1235', :id_type => :lastfm)
|
65
|
+
}.should raise_error
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
describe "search" do
|
71
|
+
before(:each) do
|
72
|
+
@client = ITunes::Client.new
|
73
|
+
end
|
74
|
+
|
75
|
+
describe ".all" do
|
76
|
+
it "should raise an ArgumentError when passed a nil search term" do
|
77
|
+
lambda {
|
78
|
+
@client.all(nil)
|
79
|
+
}.should raise_error
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should raise an ArgumentError when passed an empty string as a search term" do
|
83
|
+
lambda {
|
84
|
+
@client.all('')
|
85
|
+
}.should raise_error
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should accept a limit option" do
|
89
|
+
response = @client.all('Michael Jackson', :limit => 2)
|
90
|
+
response.result_count.should == 2
|
91
|
+
end
|
92
|
+
|
93
|
+
it "should ignore the limit when set to 0" do
|
94
|
+
@client.limit = 0
|
95
|
+
response = @client.all('Michael Jackson')
|
96
|
+
response.result_count.should > 0
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
describe ".music" do
|
101
|
+
it "should return music results" do
|
102
|
+
response = @client.music('Jose James')
|
103
|
+
response.results.each do |result|
|
104
|
+
result.kind.should == 'song'
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe ".podcast" do
|
110
|
+
it "should return podcast results" do
|
111
|
+
response = @client.podcast('Beyondjazz')
|
112
|
+
response.results.each do |result|
|
113
|
+
result.kind.should == 'podcast'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe ".movie" do
|
119
|
+
it "should return movie results" do
|
120
|
+
response = @client.movie('Blade Runner')
|
121
|
+
response.results.each do |result|
|
122
|
+
result.kind.should == 'feature-movie'
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
describe ".music_video" do
|
128
|
+
it "should return music video results" do
|
129
|
+
response = @client.music_video('Sabotage')
|
130
|
+
response.results.each do |result|
|
131
|
+
result.kind.should == 'music-video'
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
describe ".audiobook" do
|
137
|
+
it "should return audiobook results" do
|
138
|
+
response = @client.audiobook('Ernest Hemingway')
|
139
|
+
response.results.each do |result|
|
140
|
+
result.wrapper_type.should == 'audiobook'
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe ".short_film" do
|
146
|
+
it "should return short film results" do
|
147
|
+
response = @client.short_film('Pixar')
|
148
|
+
response.results.each do |result|
|
149
|
+
result.kind.should == 'feature-movie'
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe ".tv_show" do
|
155
|
+
it "should return tv show results" do
|
156
|
+
response = @client.tv_show('Lost')
|
157
|
+
response.results.each do |result|
|
158
|
+
result.kind.should == 'tv-episode'
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
164
|
+
end
|
data/spec/itunes_spec.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.expand_path('../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe ITunes do
|
4
|
+
after do
|
5
|
+
ITunes.reset
|
6
|
+
end
|
7
|
+
|
8
|
+
use_vcr_cassette :record => :new_episodes, :match_requests_on => [:uri, :method]
|
9
|
+
|
10
|
+
context "when delegating to a client" do
|
11
|
+
|
12
|
+
it "should return the same results as a client" do
|
13
|
+
ITunes.music('Jose James').should == ITunes::Client.new.music('Jose James')
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
describe ".limit" do
|
19
|
+
it 'should return the default limit' do
|
20
|
+
ITunes.limit.should == ITunes::Configuration::DEFAULT_LIMIT
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe ".limit=" do
|
25
|
+
it "should set the limit" do
|
26
|
+
ITunes.limit = 5
|
27
|
+
ITunes.limit.should == 5
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
describe ".adapter" do
|
32
|
+
it "should instantiate with the default adapter" do
|
33
|
+
ITunes.adapter.should == Faraday.default_adapter
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe ".adapter=" do
|
38
|
+
it "should set the adapter" do
|
39
|
+
ITunes.adapter = :typhoeus
|
40
|
+
ITunes.adapter.should == :typhoeus
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe ".configure" do
|
45
|
+
|
46
|
+
ITunes::Configuration::VALID_OPTIONS_KEYS.each do |key|
|
47
|
+
it "should set the #{key}" do
|
48
|
+
ITunes.configure do |config|
|
49
|
+
config.send("#{key}=", key)
|
50
|
+
ITunes.send(key).should == key
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'simplecov'
|
2
|
+
SimpleCov.start do
|
3
|
+
add_group 'ITunes', 'lib/itunes'
|
4
|
+
add_group 'Faraday Middleware', 'lib/faraday'
|
5
|
+
add_group 'Specs', 'spec'
|
6
|
+
end
|
7
|
+
|
8
|
+
require File.expand_path('../../lib/itunes', __FILE__)
|
9
|
+
|
10
|
+
require 'rspec'
|
11
|
+
require 'vcr'
|
12
|
+
|
13
|
+
RSpec.configure do |c|
|
14
|
+
c.extend VCR::RSpec::Macros
|
15
|
+
end
|
16
|
+
|
17
|
+
VCR.config do |c|
|
18
|
+
c.cassette_library_dir = 'spec/fixtures'
|
19
|
+
c.stub_with :webmock
|
20
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itunes
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 0.
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Garrett Bjerkhoel
|
@@ -15,24 +15,228 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-02-11 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: bundler
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
26
26
|
requirements:
|
27
|
-
- -
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 15
|
30
|
+
segments:
|
31
|
+
- 1
|
32
|
+
- 0
|
33
|
+
version: "1.0"
|
34
|
+
type: :development
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 27
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 8
|
48
|
+
version: "0.8"
|
49
|
+
type: :development
|
50
|
+
version_requirements: *id002
|
51
|
+
- !ruby/object:Gem::Dependency
|
52
|
+
name: rspec
|
53
|
+
prerelease: false
|
54
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
55
|
+
none: false
|
56
|
+
requirements:
|
57
|
+
- - ~>
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
hash: 27
|
60
|
+
segments:
|
61
|
+
- 2
|
62
|
+
- 5
|
63
|
+
- 0
|
64
|
+
version: 2.5.0
|
65
|
+
type: :development
|
66
|
+
version_requirements: *id003
|
67
|
+
- !ruby/object:Gem::Dependency
|
68
|
+
name: yard
|
69
|
+
prerelease: false
|
70
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
71
|
+
none: false
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
hash: 7
|
76
|
+
segments:
|
77
|
+
- 0
|
78
|
+
- 6
|
79
|
+
version: "0.6"
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id004
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: maruku
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
hash: 7
|
91
|
+
segments:
|
92
|
+
- 0
|
93
|
+
- 6
|
94
|
+
version: "0.6"
|
95
|
+
type: :development
|
96
|
+
version_requirements: *id005
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: simplecov
|
99
|
+
prerelease: false
|
100
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
102
|
+
requirements:
|
103
|
+
- - ~>
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
hash: 13
|
106
|
+
segments:
|
107
|
+
- 0
|
108
|
+
- 3
|
109
|
+
version: "0.3"
|
110
|
+
type: :development
|
111
|
+
version_requirements: *id006
|
112
|
+
- !ruby/object:Gem::Dependency
|
113
|
+
name: webmock
|
114
|
+
prerelease: false
|
115
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
116
|
+
none: false
|
117
|
+
requirements:
|
118
|
+
- - ~>
|
28
119
|
- !ruby/object:Gem::Version
|
29
120
|
hash: 3
|
30
121
|
segments:
|
122
|
+
- 1
|
123
|
+
- 6
|
124
|
+
version: "1.6"
|
125
|
+
type: :development
|
126
|
+
version_requirements: *id007
|
127
|
+
- !ruby/object:Gem::Dependency
|
128
|
+
name: vcr
|
129
|
+
prerelease: false
|
130
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ~>
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
hash: 7
|
136
|
+
segments:
|
137
|
+
- 1
|
138
|
+
- 4
|
31
139
|
- 0
|
32
|
-
version:
|
140
|
+
version: 1.4.0
|
141
|
+
type: :development
|
142
|
+
version_requirements: *id008
|
143
|
+
- !ruby/object:Gem::Dependency
|
144
|
+
name: json
|
145
|
+
prerelease: false
|
146
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ~>
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
hash: 1
|
152
|
+
segments:
|
153
|
+
- 1
|
154
|
+
- 5
|
155
|
+
- 1
|
156
|
+
version: 1.5.1
|
157
|
+
type: :development
|
158
|
+
version_requirements: *id009
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: hashie
|
161
|
+
prerelease: false
|
162
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ~>
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
hash: 23
|
168
|
+
segments:
|
169
|
+
- 1
|
170
|
+
- 0
|
171
|
+
- 0
|
172
|
+
version: 1.0.0
|
33
173
|
type: :runtime
|
34
|
-
version_requirements: *
|
35
|
-
|
174
|
+
version_requirements: *id010
|
175
|
+
- !ruby/object:Gem::Dependency
|
176
|
+
name: rash
|
177
|
+
prerelease: false
|
178
|
+
requirement: &id011 !ruby/object:Gem::Requirement
|
179
|
+
none: false
|
180
|
+
requirements:
|
181
|
+
- - ~>
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
hash: 23
|
184
|
+
segments:
|
185
|
+
- 0
|
186
|
+
- 2
|
187
|
+
- 0
|
188
|
+
version: 0.2.0
|
189
|
+
type: :runtime
|
190
|
+
version_requirements: *id011
|
191
|
+
- !ruby/object:Gem::Dependency
|
192
|
+
name: faraday
|
193
|
+
prerelease: false
|
194
|
+
requirement: &id012 !ruby/object:Gem::Requirement
|
195
|
+
none: false
|
196
|
+
requirements:
|
197
|
+
- - ~>
|
198
|
+
- !ruby/object:Gem::Version
|
199
|
+
hash: 3
|
200
|
+
segments:
|
201
|
+
- 0
|
202
|
+
- 5
|
203
|
+
- 4
|
204
|
+
version: 0.5.4
|
205
|
+
type: :runtime
|
206
|
+
version_requirements: *id012
|
207
|
+
- !ruby/object:Gem::Dependency
|
208
|
+
name: faraday_middleware
|
209
|
+
prerelease: false
|
210
|
+
requirement: &id013 !ruby/object:Gem::Requirement
|
211
|
+
none: false
|
212
|
+
requirements:
|
213
|
+
- - ~>
|
214
|
+
- !ruby/object:Gem::Version
|
215
|
+
hash: 17
|
216
|
+
segments:
|
217
|
+
- 0
|
218
|
+
- 3
|
219
|
+
- 1
|
220
|
+
version: 0.3.1
|
221
|
+
type: :runtime
|
222
|
+
version_requirements: *id013
|
223
|
+
- !ruby/object:Gem::Dependency
|
224
|
+
name: multi_json
|
225
|
+
prerelease: false
|
226
|
+
requirement: &id014 !ruby/object:Gem::Requirement
|
227
|
+
none: false
|
228
|
+
requirements:
|
229
|
+
- - ~>
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
hash: 21
|
232
|
+
segments:
|
233
|
+
- 0
|
234
|
+
- 0
|
235
|
+
- 5
|
236
|
+
version: 0.0.5
|
237
|
+
type: :runtime
|
238
|
+
version_requirements: *id014
|
239
|
+
description:
|
36
240
|
email: me@garrettbjerkhoel.com
|
37
241
|
executables: []
|
38
242
|
|
@@ -42,10 +246,28 @@ extra_rdoc_files:
|
|
42
246
|
- MIT-LICENSE
|
43
247
|
- README.md
|
44
248
|
files:
|
249
|
+
- .gitignore
|
250
|
+
- .rspec
|
251
|
+
- Gemfile
|
45
252
|
- MIT-LICENSE
|
46
253
|
- README.md
|
254
|
+
- Rakefile
|
255
|
+
- itunes.gemspec
|
256
|
+
- lib/faraday/rashify.rb
|
47
257
|
- lib/itunes.rb
|
258
|
+
- lib/itunes/client.rb
|
259
|
+
- lib/itunes/client/lookup.rb
|
260
|
+
- lib/itunes/client/search.rb
|
261
|
+
- lib/itunes/configuration.rb
|
262
|
+
- lib/itunes/request.rb
|
48
263
|
- lib/itunes/version.rb
|
264
|
+
- spec/faraday/rashify_spec.rb
|
265
|
+
- spec/fixtures/Faraday_Response_Rashify.yml
|
266
|
+
- spec/fixtures/ITunes.yml
|
267
|
+
- spec/fixtures/ITunes_Client.yml
|
268
|
+
- spec/itunes/client_spec.rb
|
269
|
+
- spec/itunes_spec.rb
|
270
|
+
- spec/spec_helper.rb
|
49
271
|
has_rdoc: true
|
50
272
|
homepage: http://github.com/dewski/itunes
|
51
273
|
licenses: []
|
@@ -76,9 +298,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
298
|
requirements: []
|
77
299
|
|
78
300
|
rubyforge_project: itunes
|
79
|
-
rubygems_version: 1.
|
301
|
+
rubygems_version: 1.5.0
|
80
302
|
signing_key:
|
81
303
|
specification_version: 3
|
82
|
-
summary: iTunes
|
83
|
-
test_files:
|
84
|
-
|
304
|
+
summary: iTunes API
|
305
|
+
test_files:
|
306
|
+
- spec/faraday/rashify_spec.rb
|
307
|
+
- spec/fixtures/Faraday_Response_Rashify.yml
|
308
|
+
- spec/fixtures/ITunes.yml
|
309
|
+
- spec/fixtures/ITunes_Client.yml
|
310
|
+
- spec/itunes/client_spec.rb
|
311
|
+
- spec/itunes_spec.rb
|
312
|
+
- spec/spec_helper.rb
|