spot 0.1.4 → 2.0.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/README.markdown +41 -75
- data/lib/spot.rb +173 -178
- data/lib/spot/album.rb +4 -4
- data/lib/spot/artist.rb +2 -2
- data/lib/spot/base.rb +1 -1
- data/lib/spot/clean.rb +55 -0
- data/lib/spot/exclude.yml +3 -15
- data/lib/spot/ignore.yml +14 -0
- data/lib/spot/song.rb +6 -6
- data/spec/album_spec.rb +4 -4
- data/spec/artist_spec.rb +3 -3
- data/spec/base_spec.rb +2 -2
- data/spec/clean_spec.rb +113 -0
- data/spec/fixtures/vcr_cassettes/spotify.yml +5256 -0
- data/spec/song_spec.rb +7 -17
- data/spec/spec_helper.rb +13 -9
- data/spec/spot_spec.rb +221 -0
- data/spot.gemspec +4 -3
- metadata +95 -86
- data/spec/spotify_spec.rb +0 -435
data/spec/song_spec.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "./lib/spot/song"
|
3
3
|
|
4
|
-
describe
|
4
|
+
describe Spot::Song do
|
5
5
|
before(:each) do
|
6
|
-
@song =
|
6
|
+
@song = Spot::Song.new(JSON.load(File.read("spec/fixtures/track.json"))["tracks"].first)
|
7
7
|
end
|
8
8
|
|
9
9
|
context "the available? method" do
|
@@ -17,11 +17,11 @@ describe SpotContainer::Song do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should have an artist" do
|
20
|
-
@song.artist.should be_instance_of(
|
20
|
+
@song.artist.should be_instance_of(Spot::Artist)
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should have an album" do
|
24
|
-
@song.album.should be_instance_of(
|
24
|
+
@song.album.should be_instance_of(Spot::Album)
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should have the correct accessors" do
|
@@ -45,7 +45,7 @@ describe SpotContainer::Song do
|
|
45
45
|
end
|
46
46
|
|
47
47
|
it "should inherit from base" do
|
48
|
-
@song.class.ancestors.should include(
|
48
|
+
@song.class.ancestors.should include(Spot::Base)
|
49
49
|
end
|
50
50
|
|
51
51
|
it "should have a title method that equals the name method" do
|
@@ -53,16 +53,6 @@ describe SpotContainer::Song do
|
|
53
53
|
end
|
54
54
|
|
55
55
|
it "should have a working to string method" do
|
56
|
-
@song.to_s.should eq("#{@song.
|
57
|
-
end
|
58
|
-
|
59
|
-
context "user requst" do
|
60
|
-
before(:all) do
|
61
|
-
WebMock.allow_net_connect!
|
62
|
-
end
|
63
|
-
|
64
|
-
it "should match user request" do
|
65
|
-
Spot.territory("SE").prime.strip.find_song("Call My Name - Tove Styrke").result.to_s.should eq("Call My Name - Tove Styrke")
|
66
|
-
end
|
67
|
-
end
|
56
|
+
@song.to_s.should eq("#{@song.artist.name} - #{@song.title}")
|
57
|
+
end
|
68
58
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
require "rspec"
|
2
|
-
require "webmock/rspec"
|
3
2
|
require "spot"
|
3
|
+
require "vcr"
|
4
|
+
require "webmock/rspec"
|
4
5
|
|
5
6
|
RSpec.configure do |config|
|
6
7
|
config.mock_with :rspec
|
8
|
+
config.extend VCR::RSpec::Macros
|
9
|
+
end
|
10
|
+
|
11
|
+
VCR.configure do |c|
|
12
|
+
c.cassette_library_dir = "spec/fixtures/vcr_cassettes"
|
13
|
+
c.hook_into :webmock
|
14
|
+
c.default_cassette_options = {
|
15
|
+
:record => :new_episodes
|
16
|
+
}
|
17
|
+
c.allow_http_connections_when_no_cassette = false
|
7
18
|
end
|
8
19
|
|
9
20
|
def mock_media(ret)
|
@@ -19,17 +30,10 @@ def validate_artists(artists)
|
|
19
30
|
end
|
20
31
|
end
|
21
32
|
|
22
|
-
def set_up(times = 100, ret = true, klass =
|
33
|
+
def set_up(times = 100, ret = true, klass = Spot::Song)
|
23
34
|
klass.should_receive(:new).exactly(times).times.and_return(mock_media(ret))
|
24
35
|
end
|
25
36
|
|
26
37
|
def generate_url(type, search, page = 1)
|
27
38
|
"http://ws.spotify.com/search/1/#{type}.json?q=#{URI.escape(search)}&page=#{page}"
|
28
|
-
end
|
29
|
-
|
30
|
-
def stubs(type, search, page = 1)
|
31
|
-
url = generate_url(type, search, page)
|
32
|
-
stub_request(:get, url).
|
33
|
-
to_return(:body => File.read("spec/fixtures/#{type}.json"), :status => 200)
|
34
|
-
url
|
35
39
|
end
|
data/spec/spot_spec.rb
ADDED
@@ -0,0 +1,221 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
|
3
|
+
describe Spot::Search do
|
4
|
+
use_vcr_cassette "spotify"
|
5
|
+
|
6
|
+
before(:each) do
|
7
|
+
@spot = Spot::Search.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context "tracks if success" do
|
11
|
+
it "should contain the right amounts of songs" do
|
12
|
+
Spot::Search.find_all_songs("kaizers orchestra").should have(100).results
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should call Spot::Song with the right arguments" do
|
16
|
+
Spot::Song.should_receive(:new) do |args|
|
17
|
+
args["album"]["released"].should match(/^\d{4}$/)
|
18
|
+
args["album"]["href"].should match(/^spotify\:album\:[a-zA-Z0-9]+$/)
|
19
|
+
args["album"]["name"].should_not be_empty
|
20
|
+
args["album"]["availability"]["territories"].should match(/[A-Z]{2}|(worldwide)/)
|
21
|
+
|
22
|
+
args["name"].should_not be_empty
|
23
|
+
args["popularity"].should match(/[0-9\.]+/)
|
24
|
+
args["length"].should be_instance_of(Float)
|
25
|
+
args["href"].should match(/^spotify\:track\:[a-zA-Z0-9]+$/)
|
26
|
+
|
27
|
+
validate_artists(args["artists"])
|
28
|
+
|
29
|
+
mock_media(true)
|
30
|
+
end.exactly(100).times
|
31
|
+
|
32
|
+
Spot::Search.find_all_songs("kaizers orchestra").results
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should not have any songs" do
|
36
|
+
Spot::Search.find_all_songs("d41d8cd98f00b204e9800998ecf8427e").results.should be_empty
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "artists if success" do
|
41
|
+
after(:each) do
|
42
|
+
a_request(:get, @url).should have_been_made.once
|
43
|
+
end
|
44
|
+
|
45
|
+
before(:each) do
|
46
|
+
@url = generate_url("artist", "kaizers orchestra")
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should contain the right amounts of artists" do
|
50
|
+
Spot::Search.find_all_artists("kaizers orchestra").results.should have(1).results
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should call Spot::Artist with the right arguments" do
|
54
|
+
Spot::Artist.should_receive(:new) do |args|
|
55
|
+
args["name"].should_not be_empty
|
56
|
+
args["popularity"].should match(/[0-9\.]+/)
|
57
|
+
args["href"].should match(/^spotify\:artist\:[a-zA-Z0-9]+$/)
|
58
|
+
mock_media(true)
|
59
|
+
end.exactly(1).times
|
60
|
+
|
61
|
+
Spot::Search.find_all_artists("kaizers orchestra").results
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be able to cache a request" do
|
65
|
+
set_up(1, true, Spot::Artist)
|
66
|
+
spot = Spot::Search.find_all_artists("kaizers orchestra")
|
67
|
+
10.times { spot.results }
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should not have any songs if nothing is valid" do
|
71
|
+
set_up(1, false, Spot::Artist)
|
72
|
+
Spot::Search.find_all_artists("kaizers orchestra").results.should be_empty
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
context "album if success" do
|
77
|
+
it "should contain the right amounts of albums" do
|
78
|
+
Spot::Search.find_all_albums("kaizers orchestra").should have(55).results
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should call Spot::Album with the right arguments" do
|
82
|
+
Spot::Album.should_receive(:new) do |args|
|
83
|
+
validate_artists(args["artists"])
|
84
|
+
|
85
|
+
args["href"].should match(/^spotify\:album\:[a-zA-Z0-9]+$/)
|
86
|
+
|
87
|
+
args["availability"]["territories"].should match(/[A-Z]{2}|(worldwide)/)
|
88
|
+
args["name"].should_not be_empty
|
89
|
+
args["popularity"].should match(/[0-9\.]+/)
|
90
|
+
mock_media(true)
|
91
|
+
end.exactly(55).times
|
92
|
+
|
93
|
+
Spot::Search.find_all_albums("kaizers orchestra").results
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should be possible to specify a territories" do
|
97
|
+
Spot::Search.territory("RANDOM").find_all_albums("kaizers orchestra").results.should be_empty
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
context "find_*" do
|
102
|
+
it "should only return one element" do
|
103
|
+
Spot::Search.find_song("kaizers orchestra").result.should be_instance_of(Spot::Song)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should be possible to set a page variable" do
|
108
|
+
url = generate_url("track", "kaizers orchestra", 11)
|
109
|
+
Spot::Search.page(11).find_song("kaizers orchestra").result
|
110
|
+
a_request(:get, url).should have_been_made.once
|
111
|
+
end
|
112
|
+
|
113
|
+
context "the prime method" do
|
114
|
+
it "should return the best match" do
|
115
|
+
Spot::Search.prime.find_song("kaizers orchestra").result.artist.name.should eq("Kaizers Orchestra")
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
context "method does not exist" do
|
120
|
+
it "should raise no method error if the method does't exist (plain value)" do
|
121
|
+
lambda { Spot::Search.find_song("string").random_method }.should raise_error(NoMethodError)
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should raise an error if the method matches find_*_*" do
|
125
|
+
lambda { Spot::Search.find_song("string").find_by_song }.should raise_error(NoMethodError)
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should raise an error if the method matches find_all_* " do
|
129
|
+
lambda { Spot::Search.find_song("string").find_all_random }.should raise_error(NoMethodError)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
context "exclude" do
|
134
|
+
it "should have a working exclude? method" do
|
135
|
+
{
|
136
|
+
"tribute" => true,
|
137
|
+
"cover random" => true,
|
138
|
+
"live" => true,
|
139
|
+
"club mix random" => true,
|
140
|
+
"LIVE" => true,
|
141
|
+
"karaoKE" => true,
|
142
|
+
"instrumental" => true,
|
143
|
+
"Karaoke - Won't Get Fooled Again" => true,
|
144
|
+
"club version" => true,
|
145
|
+
"instrumentals" => true,
|
146
|
+
"demo" => true,
|
147
|
+
"made famous by" => true,
|
148
|
+
"remixes" => true,
|
149
|
+
"ringtone" => true,
|
150
|
+
"ringtones" => true,
|
151
|
+
"riingtonerandom" => false,
|
152
|
+
"club random mix" => false,
|
153
|
+
"random" => false,
|
154
|
+
"oliver" => false
|
155
|
+
}.each do |comp, outcome|
|
156
|
+
@spot.exclude?(comp).should eq(outcome)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
context "territory" do
|
162
|
+
it "should not find any songs when using a non valid territory" do
|
163
|
+
@spot.territory("RANDOM").find_all_songs("search").results.should be_empty
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should find some songs when using a valid territory" do
|
167
|
+
@spot.territory("SE").find_all_songs("search").results.should_not be_empty
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should be ignored if nil" do
|
171
|
+
@spot.territory(nil).find_all_songs("search").results.count.should eq(@spot.find_all_songs("search").results.count)
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "the info values" do
|
176
|
+
after(:each) do
|
177
|
+
a_request(:get, @url).should have_been_made.once
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should have some info" do
|
181
|
+
@url = generate_url("track", "kaizers orchestra")
|
182
|
+
spot = Spot::Search.strip.find_song("kaizers orchestra")
|
183
|
+
spot.num_results.should be > 0
|
184
|
+
spot.limit.should eq(100)
|
185
|
+
spot.offset.should eq(0)
|
186
|
+
spot.query.should eq("kaizers orchestra")
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
context "bugs" do
|
191
|
+
it "handles 'Jason Derulo - Undefeated'" do
|
192
|
+
Spot::Search.strip.find_song("Jason Derulo - Undefeated").result.to_s.should eq("Jason Derulo - Undefeated")
|
193
|
+
end
|
194
|
+
|
195
|
+
it "handles 'Call My Name - Tove Styrke'" do
|
196
|
+
Spot::Search.territory("SE").prime.strip.find_song("Tove Styrke - Call My Name").result.to_s.should eq("Tove Styrke - Call My Name")
|
197
|
+
end
|
198
|
+
|
199
|
+
it "handles 'D'Banj - Oliver Twist'" do
|
200
|
+
Spot::Search.territory("SE").prime.strip.find_song("D'Banj - Oliver Twist").result.to_s.downcase.should eq("D'Banj - Oliver Twist".downcase)
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should handle 'Iron Maiden - Can I Play With Madness'" do
|
204
|
+
song = Spot::Search.territory("SE").prime.strip.find_song("Iron Maiden - Can I Play With Madness").result
|
205
|
+
song.artist.name.should eq("Iron Maiden")
|
206
|
+
song.title.should match(%r{Can I Play With Madness})
|
207
|
+
end
|
208
|
+
|
209
|
+
it "should handle 'Smooth - Undercover Lover'" do
|
210
|
+
Spot::Search.territory("SE").strip.prime.find_song("Smooth - Undercover Lover").result.to_s.should eq("Smooth - Undercover Lover")
|
211
|
+
end
|
212
|
+
|
213
|
+
it "should handle 'Basto! - Live Tonight (Gregory's Theme) (extended mix)'" do
|
214
|
+
Spot::Search.territory("SE").strip.prime.find_song("Basto! - Live Tonight (Gregory's Theme) (extended mix)").result.to_s.should eq("Basto - Live Tonight (Gregory's Theme) - Radio Edit")
|
215
|
+
end
|
216
|
+
|
217
|
+
it "should handle 'Wtf! - Da Bop'" do
|
218
|
+
Spot::Search.territory("SE").strip.prime.find_song("Wtf! - Da Bop").result.to_s.should eq("WTF! - Da Bop - Video Edit")
|
219
|
+
end
|
220
|
+
end
|
221
|
+
end
|
data/spot.gemspec
CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "spot"
|
6
|
-
s.version = "0.
|
6
|
+
s.version = "2.0.0"
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ["Linus Oleander"]
|
9
9
|
s.email = ["linus@oleander.nu"]
|
@@ -22,8 +22,9 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_dependency("rest-client")
|
23
23
|
s.add_dependency("abstract")
|
24
24
|
s.add_dependency("levenshteinish")
|
25
|
-
s.add_dependency("
|
25
|
+
s.add_dependency("charlock_holmes")
|
26
26
|
|
27
27
|
s.add_development_dependency("rspec")
|
28
|
-
s.add_development_dependency("
|
28
|
+
s.add_development_dependency("vcr")
|
29
|
+
s.add_development_dependency("webmock", "~> 1.8.0")
|
29
30
|
end
|
metadata
CHANGED
@@ -1,105 +1,111 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: spot
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.0.0
|
4
5
|
prerelease:
|
5
|
-
version: 0.1.4
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Linus Oleander
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-06-15 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: json_pure
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70199036450180 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :runtime
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: rest-client
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *70199036450180
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rest-client
|
27
|
+
requirement: &70199036449740 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :runtime
|
36
|
-
version_requirements: *id002
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: abstract
|
39
34
|
prerelease: false
|
40
|
-
|
35
|
+
version_requirements: *70199036449740
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: abstract
|
38
|
+
requirement: &70199036449320 !ruby/object:Gem::Requirement
|
41
39
|
none: false
|
42
|
-
requirements:
|
43
|
-
- -
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version:
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
46
44
|
type: :runtime
|
47
|
-
version_requirements: *id003
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: levenshteinish
|
50
45
|
prerelease: false
|
51
|
-
|
46
|
+
version_requirements: *70199036449320
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: levenshteinish
|
49
|
+
requirement: &70199036448900 !ruby/object:Gem::Requirement
|
52
50
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
version:
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
57
55
|
type: :runtime
|
58
|
-
version_requirements: *id004
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
name: rchardet19
|
61
56
|
prerelease: false
|
62
|
-
|
57
|
+
version_requirements: *70199036448900
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: charlock_holmes
|
60
|
+
requirement: &70199031942860 !ruby/object:Gem::Requirement
|
63
61
|
none: false
|
64
|
-
requirements:
|
65
|
-
- -
|
66
|
-
- !ruby/object:Gem::Version
|
67
|
-
version:
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
68
66
|
type: :runtime
|
69
|
-
|
70
|
-
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *70199031942860
|
69
|
+
- !ruby/object:Gem::Dependency
|
71
70
|
name: rspec
|
71
|
+
requirement: &70199031942440 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
type: :development
|
72
78
|
prerelease: false
|
73
|
-
|
79
|
+
version_requirements: *70199031942440
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: vcr
|
82
|
+
requirement: &70199031942020 !ruby/object:Gem::Requirement
|
74
83
|
none: false
|
75
|
-
requirements:
|
76
|
-
- -
|
77
|
-
- !ruby/object:Gem::Version
|
78
|
-
version:
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
79
88
|
type: :development
|
80
|
-
version_requirements: *id006
|
81
|
-
- !ruby/object:Gem::Dependency
|
82
|
-
name: webmock
|
83
89
|
prerelease: false
|
84
|
-
|
90
|
+
version_requirements: *70199031942020
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: webmock
|
93
|
+
requirement: &70199031941520 !ruby/object:Gem::Requirement
|
85
94
|
none: false
|
86
|
-
requirements:
|
87
|
-
- -
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version:
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 1.8.0
|
90
99
|
type: :development
|
91
|
-
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *70199031941520
|
92
102
|
description: A Ruby implementation of the Spotify Meta API.
|
93
|
-
email:
|
103
|
+
email:
|
94
104
|
- linus@oleander.nu
|
95
105
|
executables: []
|
96
|
-
|
97
106
|
extensions: []
|
98
|
-
|
99
107
|
extra_rdoc_files: []
|
100
|
-
|
101
|
-
files:
|
102
|
-
- .DS_Store
|
108
|
+
files:
|
103
109
|
- .gitignore
|
104
110
|
- .rspec
|
105
111
|
- Gemfile
|
@@ -109,54 +115,57 @@ files:
|
|
109
115
|
- lib/spot/album.rb
|
110
116
|
- lib/spot/artist.rb
|
111
117
|
- lib/spot/base.rb
|
118
|
+
- lib/spot/clean.rb
|
112
119
|
- lib/spot/exclude.yml
|
120
|
+
- lib/spot/ignore.yml
|
113
121
|
- lib/spot/song.rb
|
114
122
|
- spec/album_spec.rb
|
115
123
|
- spec/artist_spec.rb
|
116
124
|
- spec/base_spec.rb
|
125
|
+
- spec/clean_spec.rb
|
117
126
|
- spec/fixtures/album.json
|
118
127
|
- spec/fixtures/artist.json
|
119
128
|
- spec/fixtures/exclude.tribute.json
|
120
129
|
- spec/fixtures/track.json
|
130
|
+
- spec/fixtures/vcr_cassettes/spotify.yml
|
121
131
|
- spec/song_spec.rb
|
122
132
|
- spec/spec_helper.rb
|
123
|
-
- spec/
|
133
|
+
- spec/spot_spec.rb
|
124
134
|
- spot.gemspec
|
125
135
|
homepage: https://github.com/oleander/Spot
|
126
136
|
licenses: []
|
127
|
-
|
128
137
|
post_install_message:
|
129
138
|
rdoc_options: []
|
130
|
-
|
131
|
-
require_paths:
|
139
|
+
require_paths:
|
132
140
|
- lib
|
133
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
141
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
134
142
|
none: false
|
135
|
-
requirements:
|
136
|
-
- -
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version:
|
139
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
|
+
requirements:
|
144
|
+
- - ! '>='
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '0'
|
147
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
140
148
|
none: false
|
141
|
-
requirements:
|
142
|
-
- -
|
143
|
-
- !ruby/object:Gem::Version
|
144
|
-
version:
|
149
|
+
requirements:
|
150
|
+
- - ! '>='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
145
153
|
requirements: []
|
146
|
-
|
147
154
|
rubyforge_project: spot
|
148
|
-
rubygems_version: 1.8.
|
155
|
+
rubygems_version: 1.8.15
|
149
156
|
signing_key:
|
150
157
|
specification_version: 3
|
151
158
|
summary: A Ruby implementation of the Spotify Meta API
|
152
|
-
test_files:
|
159
|
+
test_files:
|
153
160
|
- spec/album_spec.rb
|
154
161
|
- spec/artist_spec.rb
|
155
162
|
- spec/base_spec.rb
|
163
|
+
- spec/clean_spec.rb
|
156
164
|
- spec/fixtures/album.json
|
157
165
|
- spec/fixtures/artist.json
|
158
166
|
- spec/fixtures/exclude.tribute.json
|
159
167
|
- spec/fixtures/track.json
|
168
|
+
- spec/fixtures/vcr_cassettes/spotify.yml
|
160
169
|
- spec/song_spec.rb
|
161
170
|
- spec/spec_helper.rb
|
162
|
-
- spec/
|
171
|
+
- spec/spot_spec.rb
|