echonest 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/LICENSE +20 -0
- data/README.rdoc +7 -0
- data/Rakefile +56 -0
- data/VERSION.yml +4 -0
- data/examples/artist_audio.rb +33 -0
- data/generators/echonest_acceptance_test/USAGE +5 -0
- data/generators/echonest_acceptance_test/echonest_acceptance_test_generator.rb +50 -0
- data/generators/echonest_acceptance_test/templates/feature.erb +8 -0
- data/generators/echonest_model/USAGE +5 -0
- data/generators/echonest_model/echonest_model_generator.rb +52 -0
- data/generators/echonest_model/templates/doc.rb.erb +12 -0
- data/generators/echonest_model/templates/result.rb.erb +12 -0
- data/generators/echonest_model/templates/results.rb.erb +15 -0
- data/generators/echonest_resource/USAGE +5 -0
- data/generators/echonest_resource/echonest_resource_generator.rb +50 -0
- data/generators/echonest_unit_test/USAGE +5 -0
- data/generators/echonest_unit_test/echonest_unit_test_generator.rb +50 -0
- data/generators/echonest_unit_test/templates/unit_test.rb.erb +44 -0
- data/lib/echonest.rb +56 -0
- data/lib/echonest/api_request.rb +26 -0
- data/lib/echonest/artist.rb +74 -0
- data/lib/echonest/paged_result.rb +33 -0
- data/lib/echonest/xml/artist_doc.rb +23 -0
- data/lib/echonest/xml/artist_search_results.rb +14 -0
- data/lib/echonest/xml/audio_doc.rb +20 -0
- data/lib/echonest/xml/audio_result.rb +13 -0
- data/lib/echonest/xml/audio_results.rb +16 -0
- data/lib/echonest/xml/blogs_doc.rb +15 -0
- data/lib/echonest/xml/blogs_result.rb +14 -0
- data/lib/echonest/xml/blogs_results.rb +18 -0
- data/lib/echonest/xml/familiarity_result.rb +12 -0
- data/lib/echonest/xml/hotttnesss_result.rb +12 -0
- data/lib/echonest/xml/news_doc.rb +15 -0
- data/lib/echonest/xml/news_result.rb +14 -0
- data/lib/echonest/xml/news_results.rb +16 -0
- data/lib/echonest/xml/profile_result.rb +12 -0
- data/lib/echonest/xml/reviews_doc.rb +16 -0
- data/lib/echonest/xml/reviews_result.rb +15 -0
- data/lib/echonest/xml/reviews_results.rb +17 -0
- data/lib/echonest/xml/similar_doc.rb +15 -0
- data/lib/echonest/xml/similar_result.rb +14 -0
- data/lib/echonest/xml/similar_results.rb +16 -0
- data/lib/echonest/xml/urls_result.rb +14 -0
- data/lib/echonest/xml/video_doc.rb +16 -0
- data/lib/echonest/xml/video_result.rb +14 -0
- data/lib/echonest/xml/video_results.rb +17 -0
- data/spec/echonest/api_request_spec.rb +38 -0
- data/spec/echonest/paged_result_spec.rb +66 -0
- data/spec/echonest/xml/artist_search_results_spec.rb +25 -0
- data/spec/echonest/xml/audio_result_spec.rb +49 -0
- data/spec/echonest/xml/blogs_result_spec.rb +48 -0
- data/spec/echonest/xml/familiarity_result_spec.rb +33 -0
- data/spec/echonest/xml/hotttness_result_spec.rb +31 -0
- data/spec/echonest/xml/news_result_spec.rb +49 -0
- data/spec/echonest/xml/profile_result_spec.rb +26 -0
- data/spec/echonest/xml/refactor.rb +12 -0
- data/spec/echonest/xml/reviews_result_spec.rb +49 -0
- data/spec/echonest/xml/similar_result_spec.rb +35 -0
- data/spec/echonest/xml/urls_result_spec.rb +38 -0
- data/spec/echonest/xml/video_result_spec.rb +48 -0
- data/spec/fixtures/audio/wavves.xml +2 -0
- data/spec/fixtures/blog/radiohead.xml +32 -0
- data/spec/fixtures/familiarity/radiohead.xml +17 -0
- data/spec/fixtures/hotttnesss/radiohead.xml +17 -0
- data/spec/fixtures/news/radiohead.xml +32 -0
- data/spec/fixtures/profile/radiohead.xml +16 -0
- data/spec/fixtures/reviews/radiohead.xml +40 -0
- data/spec/fixtures/search_artists/wavves.xml +2 -0
- data/spec/fixtures/similar/radiohead.xml +31 -0
- data/spec/fixtures/urls/radiohead.xml +21 -0
- data/spec/fixtures/video/radiohead.xml +32 -0
- data/spec/spec_helper.rb +15 -0
- data/test/test_echonest_acceptance_test_generator.rb +52 -0
- data/test/test_echonest_model_generator.rb +47 -0
- data/test/test_echonest_resource_generator.rb +45 -0
- data/test/test_echonest_unit_test_generator.rb +35 -0
- data/test/test_generator_helper.rb +29 -0
- metadata +164 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper"
|
2
|
+
|
3
|
+
describe "ApiRequest" do
|
4
|
+
before(:all) do
|
5
|
+
EchoNest.api_key = "API_KEY"
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "uri" do
|
9
|
+
before(:each) do
|
10
|
+
@uri = EchoNest::ApiRequest.new("artist_search", :query => "Wavves").uri
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should have the right resource" do
|
14
|
+
@uri.should be_starts_with("http://developer.echonest.com/api/artist_search?")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should contain query=Wavves" do
|
18
|
+
@uri.should be_include("query=Wavves") #There must be a nicer way to write this
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should contain version=3" do
|
22
|
+
@uri.should be_include("version=3")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "should contain api_key=API_KEY" do
|
26
|
+
@uri.should be_include("api_key=API_KEY")
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "uri " do
|
32
|
+
it "should encode spaces" do
|
33
|
+
@uri = EchoNest::ApiRequest.new("artist_search", :query => "Built to Spill").uri
|
34
|
+
@uri.should be_include("query=Built%20to%20Spill");
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + "/../spec_helper.rb"
|
2
|
+
|
3
|
+
include EchoNest
|
4
|
+
|
5
|
+
describe "PagedResult" do
|
6
|
+
before :each do
|
7
|
+
@docs = mock("docs", :length => 2)
|
8
|
+
@results = mock("results", :docs => @docs)
|
9
|
+
@block_body = mock("block body")
|
10
|
+
@block = Proc.new { |*args| @block_body.called(*args) }
|
11
|
+
@page = PagedResult.new @results, &@block
|
12
|
+
|
13
|
+
@docs2 = mock("docs2", :length => 2)
|
14
|
+
@page2 = mock("page2", :docs => @docs2)
|
15
|
+
@block_body.stub!(:called).and_return(@page2)
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "each" do
|
20
|
+
it "should iterate over items in results" do
|
21
|
+
@docs.should_receive(:each)
|
22
|
+
@page.each
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "[]" do
|
27
|
+
it "should return the nth doc" do
|
28
|
+
@docs.should_receive('[]').twice().with(1).and_return(:doc)
|
29
|
+
@page[1].should == :doc
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should get the next page if index is out of range" do
|
33
|
+
@docs.should_receive('[]').at_least(1).and_return(nil)
|
34
|
+
@page.should_receive(:next_page)
|
35
|
+
@page[2]
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "next_page" do
|
41
|
+
|
42
|
+
before(:each) do
|
43
|
+
@merged_docs = mock("Merged Docs", :length => 4)
|
44
|
+
@docs.stub!('+').and_return(@merged_docs)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should fetch the next page" do
|
48
|
+
@block_body.should_receive(:called).with(2, 15).and_return(@page2)
|
49
|
+
@page.next_page
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should update the delegate" do
|
53
|
+
@docs.should_receive('+').with(@docs2).and_return(@merged_docs)
|
54
|
+
@page.next_page
|
55
|
+
@page.length.should == 4
|
56
|
+
end
|
57
|
+
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
describe "length" do
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "ArtistSearchResuls" do
|
4
|
+
|
5
|
+
describe "#parse" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@xml = File.read(File.dirname(__FILE__) + "/../../fixtures/search_artists/wavves.xml")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse xml" do
|
12
|
+
ArtistSearchResults.parse(@xml)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have list of artists" do
|
16
|
+
search = ArtistSearchResults.parse(@xml)
|
17
|
+
search.artists.should be_kind_of(Array)
|
18
|
+
search.artists[0].should be_kind_of(ArtistDoc)
|
19
|
+
search.artists[0].name.should == "Wavves"
|
20
|
+
search.artists[0].id.should == "music://id.echonest.com/~/AR/ARVVZQP11E2835DBCB"
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "Audio" do
|
4
|
+
|
5
|
+
describe "#parse" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@xml = File.read(File.dirname(__FILE__) + "/../../fixtures/audio/wavves.xml")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse xml" do
|
12
|
+
AudioResult.parse(@xml)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have artist" do
|
16
|
+
audio = AudioResult.parse(@xml)
|
17
|
+
audio.artist.should be_kind_of(ArtistDoc)
|
18
|
+
audio.artist.name.should == "Wavves"
|
19
|
+
audio.artist.id.should == "music://id.echonest.com/~/AR/ARVVZQP11E2835DBCB"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have results" do
|
23
|
+
audio = AudioResult.parse(@xml)
|
24
|
+
audio.results.should be_kind_of(AudioResults)
|
25
|
+
audio.results.found.should == "51"
|
26
|
+
audio.results.shown.should == "15"
|
27
|
+
audio.results.start.should == "0"
|
28
|
+
audio.results.docs.should be_kind_of(Array)
|
29
|
+
audio.results.docs.length.should == 15
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "result" do
|
33
|
+
it "should be an AudioDoc" do
|
34
|
+
audio = AudioResult.parse(@xml)
|
35
|
+
doc = audio.results.docs[0]
|
36
|
+
doc.should be_kind_of(AudioDoc)
|
37
|
+
doc.artist_id.should == "music://id.echonest.com/~/AR/ARVVZQP11E2835DBCB"
|
38
|
+
doc.artist.should == "Wavves"
|
39
|
+
doc.release.should == "03/21/09 Austin TX"
|
40
|
+
doc.title.should == "So Bored (LIVE SXSW 2009)"
|
41
|
+
doc.url.should == "http://www.2groundcontrol.com/IMAGENS/songs/03%20So%20Bored%20%28LIVE%20SXSW%202009%29.mp3"
|
42
|
+
doc.link.should == "http://2groundcontrol.blogspot.com"
|
43
|
+
doc.length.should == "265.0"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "BlogsResult" do
|
4
|
+
|
5
|
+
describe "#parse" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@xml = File.read(File.dirname(__FILE__) + "/../../fixtures/blog/radiohead.xml")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse xml" do
|
12
|
+
BlogsResult.parse(@xml)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have artist" do
|
16
|
+
blog = BlogsResult.parse(@xml)
|
17
|
+
blog.artist.should be_kind_of(ArtistDoc)
|
18
|
+
blog.artist.name.should == "Radiohead"
|
19
|
+
blog.artist.id.should == "music://id.echonest.com/~/AR/ARH6W4X1187B99274F"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should have results" do
|
23
|
+
blog = BlogsResult.parse(@xml)
|
24
|
+
blog.results.should be_kind_of(BlogsResults)
|
25
|
+
#TODO: Fill in these values as found in fixture
|
26
|
+
blog.results.found.should == "131"
|
27
|
+
blog.results.shown.should == "2"
|
28
|
+
blog.results.start.should == "0"
|
29
|
+
blog.results.docs.should be_kind_of(Array)
|
30
|
+
blog.results.docs.length.should == 2
|
31
|
+
end
|
32
|
+
|
33
|
+
describe "result" do
|
34
|
+
it "should be an BlogDoc" do
|
35
|
+
blog = BlogsResult.parse(@xml)
|
36
|
+
doc = blog.results.docs[0]
|
37
|
+
doc.should be_kind_of(BlogsDoc)
|
38
|
+
#TODO: Create tests based on attributes in resource
|
39
|
+
doc.name.should == "Radiohead live at Santa Barbara 28.8.08 « Misspeak Music"
|
40
|
+
doc.url.should == "http://misspeakmusic.wordpress.com/2008/09/01/radiohead-live-at-santa-barbara-28808/"
|
41
|
+
doc.summary.should == "[blog text removed]"
|
42
|
+
doc.date_found.should == "2008-10-14 16:38:15.582000"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "FamiliarityResult" do
|
4
|
+
|
5
|
+
describe "#parse" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@xml = File.read(File.dirname(__FILE__) + "/../../fixtures/familiarity/radiohead.xml")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse xml" do
|
12
|
+
FamiliarityResult.parse(@xml)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have artist" do
|
16
|
+
familiarity = FamiliarityResult.parse(@xml)
|
17
|
+
familiarity.artist.should be_kind_of(ArtistDoc)
|
18
|
+
familiarity.artist.name.should == "Radiohead"
|
19
|
+
familiarity.artist.id.should == "music://id.echonest.com/~/AR/ARH6W4X1187B99274F"
|
20
|
+
end
|
21
|
+
|
22
|
+
it " artist should have familiarity" do
|
23
|
+
familiarity = FamiliarityResult.parse(@xml)
|
24
|
+
familiarity.artist.should be_kind_of(ArtistDoc)
|
25
|
+
familiarity.artist.familiarity.should_not be_nil
|
26
|
+
familiarity.artist.familiarity.should == 0.96974159665
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../../spec_helper'
|
2
|
+
|
3
|
+
describe "HotttnessResult" do
|
4
|
+
|
5
|
+
describe "#parse" do
|
6
|
+
|
7
|
+
before(:each) do
|
8
|
+
@xml = File.read(File.dirname(__FILE__) + "/../../fixtures/hotttnesss/radiohead.xml")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "should parse xml" do
|
12
|
+
HotttnesssResult.parse(@xml)
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should have artist" do
|
16
|
+
hottnesss = HotttnesssResult.parse(@xml)
|
17
|
+
hottnesss.artist.should be_kind_of(ArtistDoc)
|
18
|
+
hottnesss.artist.name.should == "Radiohead"
|
19
|
+
hottnesss.artist.id.should == "music://id.echonest.com/~/AR/ARH6W4X1187B99274F"
|
20
|
+
end
|
21
|
+
|
22
|
+
it "artist should have hottnesss" do
|
23
|
+
hottnesss = HotttnesssResult.parse(@xml)
|
24
|
+
hottnesss.artist.should be_kind_of(ArtistDoc)
|
25
|
+
hottnesss.artist.hotttnesss.should_not be_nil
|
26
|
+
hottnesss.artist.hotttnesss.should == 0.96974159665
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
end
|