scrobbler2 0.0.4

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.
Files changed (117) hide show
  1. data/.gitignore +1 -0
  2. data/README.rdoc +155 -0
  3. data/Rakefile +8 -0
  4. data/TODO +23 -0
  5. data/VERSION.yml +4 -0
  6. data/generators/acceptance_test/USAGE +9 -0
  7. data/generators/acceptance_test/acceptance_test_generator.rb +57 -0
  8. data/generators/acceptance_test/templates/acceptance_test.rb.erb +14 -0
  9. data/generators/resource/USAGE +8 -0
  10. data/generators/resource/resource_generator.rb +47 -0
  11. data/generators/resource/templates/resource.rb.erb +11 -0
  12. data/generators/resource/templates/spec.rb.erb +22 -0
  13. data/lib/scrobbler2.rb +23 -0
  14. data/lib/scrobbler2/album.rb +11 -0
  15. data/lib/scrobbler2/artist.rb +26 -0
  16. data/lib/scrobbler2/auth.rb +19 -0
  17. data/lib/scrobbler2/base.rb +100 -0
  18. data/lib/scrobbler2/event.rb +12 -0
  19. data/lib/scrobbler2/geo.rb +15 -0
  20. data/lib/scrobbler2/group.rb +14 -0
  21. data/lib/scrobbler2/library.rb +12 -0
  22. data/lib/scrobbler2/playlist.rb +10 -0
  23. data/lib/scrobbler2/tag.rb +18 -0
  24. data/lib/scrobbler2/track.rb +13 -0
  25. data/lib/scrobbler2/user.rb +29 -0
  26. data/lib/scrobbler2/venue.rb +12 -0
  27. data/script/console +10 -0
  28. data/script/destroy +14 -0
  29. data/script/generate +14 -0
  30. data/scrobbler2.gemspec +243 -0
  31. data/tasks/jeweler.rake +15 -0
  32. data/tasks/rcov.rake +9 -0
  33. data/tasks/rdoc.rake +7 -0
  34. data/tasks/tests.rake +10 -0
  35. data/test/acceptance/album/info_test.rb +56 -0
  36. data/test/acceptance/artist/add_tags_test.rb +14 -0
  37. data/test/acceptance/artist/events_test.rb +47 -0
  38. data/test/acceptance/artist/info_test.rb +53 -0
  39. data/test/acceptance/artist/shouts_test.rb +48 -0
  40. data/test/acceptance/artist/similar_artists_test.rb +20 -0
  41. data/test/acceptance/artist/tags_test.rb +24 -0
  42. data/test/acceptance/artist/top_albums_test.rb +34 -0
  43. data/test/acceptance/artist/top_fans.rb +19 -0
  44. data/test/acceptance/artist/top_tags.rb +18 -0
  45. data/test/acceptance/artist/top_tracks.rb +47 -0
  46. data/test/acceptance/auth/auth_test.rb +21 -0
  47. data/test/acceptance/event/info_test.rb +66 -0
  48. data/test/acceptance/event/shouts_test.rb +49 -0
  49. data/test/acceptance/geo/events_test.rb +14 -0
  50. data/test/acceptance/geo/top_artists_test.rb +16 -0
  51. data/test/acceptance/geo/top_tracks_test.rb +16 -0
  52. data/test/acceptance/group/members_test.rb +60 -0
  53. data/test/acceptance/group/weekly_album_chart_test.rb +61 -0
  54. data/test/acceptance/group/weekly_artist_chart_test.rb +54 -0
  55. data/test/acceptance/group/weekly_chart_list_test.rb +39 -0
  56. data/test/acceptance/group/weekly_track_chart_test.rb +61 -0
  57. data/test/acceptance/library/albums_test.rb +34 -0
  58. data/test/acceptance/library/artists_test.rb +33 -0
  59. data/test/acceptance/library/tracks_test.rb +33 -0
  60. data/test/acceptance/playlist/fetch_test.rb +68 -0
  61. data/test/acceptance/shared/album.rb +41 -0
  62. data/test/acceptance/shared/artist.rb +16 -0
  63. data/test/acceptance/shared/paged_result.rb +16 -0
  64. data/test/acceptance/shared/top_fans.rb +29 -0
  65. data/test/acceptance/shared/top_tags.rb +23 -0
  66. data/test/acceptance/shared/track.rb +23 -0
  67. data/test/acceptance/tag/similar_test.rb +15 -0
  68. data/test/acceptance/tag/top_albums_test.rb +37 -0
  69. data/test/acceptance/tag/top_artists_test.rb +31 -0
  70. data/test/acceptance/tag/top_tags_test.rb +32 -0
  71. data/test/acceptance/tag/top_tracks_test.rb +33 -0
  72. data/test/acceptance/tag/weekly_artist_chart.rb +54 -0
  73. data/test/acceptance/tag/weekly_chart_list.rb +39 -0
  74. data/test/acceptance/test_helper.rb +15 -0
  75. data/test/acceptance/track/info_test.rb +47 -0
  76. data/test/acceptance/track/similar_test.rb +22 -0
  77. data/test/acceptance/track/top_fans_test.rb +23 -0
  78. data/test/acceptance/track/top_tags_test.rb +24 -0
  79. data/test/acceptance/user/events_test.rb +27 -0
  80. data/test/acceptance/user/friends_test.rb +14 -0
  81. data/test/acceptance/user/info_test.rb +19 -0
  82. data/test/acceptance/user/loved_tracks_test.rb +14 -0
  83. data/test/acceptance/user/neighbours_test.rb +14 -0
  84. data/test/acceptance/user/past_events_test.rb +14 -0
  85. data/test/acceptance/user/playlists_test.rb +14 -0
  86. data/test/acceptance/user/recent_tracks_test.rb +14 -0
  87. data/test/acceptance/user/recommended_artists_test.rb +16 -0
  88. data/test/acceptance/user/recommended_events_test.rb +16 -0
  89. data/test/acceptance/user/shouts_test.rb +14 -0
  90. data/test/acceptance/user/top_albums_test.rb +14 -0
  91. data/test/acceptance/user/top_artists_test.rb +14 -0
  92. data/test/acceptance/user/top_tags_test.rb +14 -0
  93. data/test/acceptance/user/top_tracks_test.rb +14 -0
  94. data/test/acceptance/user/weekly_album_chart_test.rb +14 -0
  95. data/test/acceptance/user/weekly_artist_chart_test.rb +14 -0
  96. data/test/acceptance/user/weekly_chart_list_test.rb +14 -0
  97. data/test/acceptance/user/weekly_track_chart_test.rb +14 -0
  98. data/test/acceptance/venue/events_test.rb +14 -0
  99. data/test/acceptance/venue/past_events_test.rb +14 -0
  100. data/test/generators/test_acceptance_test_generator.rb +46 -0
  101. data/test/generators/test_generator_helper.rb +29 -0
  102. data/test/generators/test_resource_generator.rb +71 -0
  103. data/test/unit/album_spec.rb +17 -0
  104. data/test/unit/artist_spec.rb +62 -0
  105. data/test/unit/auth_spec.rb +22 -0
  106. data/test/unit/base_spec.rb +193 -0
  107. data/test/unit/event_spec.rb +23 -0
  108. data/test/unit/geo_spec.rb +36 -0
  109. data/test/unit/group_spec.rb +38 -0
  110. data/test/unit/library_spec.rb +27 -0
  111. data/test/unit/playlist_spec.rb +18 -0
  112. data/test/unit/spec_helper.rb +7 -0
  113. data/test/unit/tag_spec.rb +50 -0
  114. data/test/unit/track_spec.rb +33 -0
  115. data/test/unit/user_spec.rb +148 -0
  116. data/test/unit/venue_spec.rb +29 -0
  117. metadata +272 -0
@@ -0,0 +1,34 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Albums for library 'gingerhendrix'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @library = Scrobbler2::Library.new 'gingerhendrix'
7
+ @it = @library.albums
8
+ end
9
+
10
+ it { @it.should be_kind_of Hash }
11
+
12
+ it_should_behave_like "PagedResult"
13
+
14
+ it "should have user 'gingerhendrix'" do
15
+ @it["user"].should == "gingerhendrix"
16
+ end
17
+
18
+ it "should have a list of albums" do
19
+ @it.should have_key('album')
20
+ @it['album'].should be_kind_of(Array)
21
+ end
22
+
23
+ describe "Album" do
24
+ before(:each) do
25
+ @album = @it['album'][0]
26
+ end
27
+
28
+ it_should_behave_like "Album"
29
+
30
+ it { @album.should have_key 'playcount' }
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Artists for library 'gingerhendrix'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @library = Scrobbler2::Library.new 'gingerhendrix'
7
+ @it = @library.artists
8
+ end
9
+
10
+ it { @it.should be_kind_of Hash }
11
+
12
+ it "should have user 'gingerhendrix'" do
13
+ @it["user"].should == "gingerhendrix"
14
+ end
15
+
16
+ it_should_behave_like "PagedResult"
17
+
18
+ it "should have a list of artists" do
19
+ @it.should have_key('artist')
20
+ @it['artist'].should be_kind_of(Array)
21
+ end
22
+
23
+ describe "artist" do
24
+ before(:each) do
25
+ @artist = @it['artist'][0]
26
+ end
27
+
28
+ it_should_behave_like "Artist"
29
+ it { @artist.should have_key 'playcount' }
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Tracks for library 'gingerhendrix'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @library = Scrobbler2::Library.new 'gingerhendrix'
7
+ @it = @library.tracks
8
+ end
9
+
10
+ it "should be hash" do
11
+ @it.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have user 'gingerhendrix'" do
15
+ @it["user"].should == "gingerhendrix"
16
+ end
17
+
18
+ it_should_behave_like "PagedResult"
19
+
20
+ it "should have a list of tracks" do
21
+ @it.should have_key('track')
22
+ @it['track'].should be_kind_of(Array)
23
+ end
24
+
25
+ describe "track" do
26
+
27
+ before(:each) { @track = @it['track'][0] }
28
+
29
+ it { @track.should have_key 'playcount' }
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Playlist lastfm://playlist/album/2026126" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @playlist = Scrobbler2::Playlist.new 'lastfm://playlist/album/2026126'
7
+ @info = @playlist.fetch
8
+ end
9
+
10
+ it "should be hash" do
11
+ @info.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have title 'Cher - Believe'" do
15
+ @info["title"].should == "Cher - Believe"
16
+ end
17
+
18
+ it "should have creator" do
19
+ @info.should have_key 'creator'
20
+ end
21
+
22
+ it "should have date" do
23
+ @info.should have_key 'date'
24
+ end
25
+
26
+ it "should have trackList" do
27
+ @info.should have_key 'trackList'
28
+ @info['trackList'].should be_kind_of Hash
29
+ @info['trackList'].should have_key 'track'
30
+ @info['trackList']['track'].should be_kind_of Array
31
+ end
32
+
33
+ describe "track" do
34
+ before(:each) do
35
+ @track = @info['trackList']['track'][0]
36
+ end
37
+
38
+ it "should have title" do
39
+ @track.should have_key 'title'
40
+ end
41
+
42
+ it "should have identifier" do
43
+ @track.should have_key 'identifier'
44
+ end
45
+
46
+ it "should have album" do
47
+ @track.should have_key 'album'
48
+ end
49
+
50
+ it "should have creator" do
51
+ @track.should have_key 'creator'
52
+ end
53
+
54
+ it "should have duration" do
55
+ @track.should have_key 'duration'
56
+ end
57
+
58
+ it "should have info" do
59
+ @track.should have_key 'info'
60
+ end
61
+
62
+ it "should have image" do
63
+ @track.should have_key 'image'
64
+ end
65
+
66
+ end
67
+
68
+ end
@@ -0,0 +1,41 @@
1
+
2
+ describe "Album", :shared => true do
3
+ it "should have name" do
4
+ @album.should have_key 'name'
5
+ end
6
+
7
+ it "should have mbid" do
8
+ @album.should have_key 'mbid'
9
+ end
10
+
11
+ it "should have url" do
12
+ @album.should have_key 'url'
13
+ end
14
+
15
+ it "should have artist" do
16
+ @album.should have_key 'artist'
17
+ @album['artist'].should be_kind_of(Hash)
18
+ @album['artist'].should have_key('mbid')
19
+ @album['artist'].should have_key('name')
20
+ @album['artist'].should have_key('url')
21
+ end
22
+ end
23
+
24
+
25
+ describe "Album with simple artist and title", :shared => true do
26
+ it "should have title" do
27
+ @album.should have_key 'title'
28
+ end
29
+
30
+ it "should have mbid" do
31
+ @album.should have_key 'mbid'
32
+ end
33
+
34
+ it "should have url" do
35
+ @album.should have_key 'url'
36
+ end
37
+
38
+ it "should have artist" do
39
+ @album.should have_key 'artist'
40
+ end
41
+ end
@@ -0,0 +1,16 @@
1
+
2
+ describe "Artist", :shared => true do
3
+
4
+ it "should have name" do
5
+ @artist.should have_key 'name'
6
+ end
7
+
8
+ it "should have mbid" do
9
+ @artist.should have_key 'mbid'
10
+ end
11
+
12
+ it "should have url" do
13
+ @artist.should have_key 'url'
14
+ end
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+
2
+ describe "PagedResult", :shared => true do
3
+
4
+ it "should have page" do
5
+ @it.should have_key("page")
6
+ end
7
+
8
+ it "should have perPage" do
9
+ @it.should have_key("perPage")
10
+ end
11
+
12
+ it "should have totalPages" do
13
+ @it.should have_key("totalPages")
14
+ end
15
+
16
+ end
@@ -0,0 +1,29 @@
1
+
2
+ describe "Top Fans", :shared => true do
3
+
4
+ it "should have array of users" do
5
+ @fans.should have_key('user')
6
+ @fans['user'].should be_a_kind_of(Array)
7
+ @fans['user'].length.should > 0
8
+ end
9
+
10
+ describe "a fan" do
11
+
12
+ before(:each) do
13
+ @fan = @fans['user'][0]
14
+ end
15
+
16
+ it "should have a name" do
17
+ @fan.should have_key('name')
18
+ end
19
+
20
+ it "should have a url" do
21
+ @fan.should have_key('url')
22
+ end
23
+
24
+ it "should have a weight" do
25
+ @fan.should have_key('weight')
26
+ end
27
+ end
28
+
29
+ end
@@ -0,0 +1,23 @@
1
+
2
+ describe "Top Tags", :shared => true do
3
+ it "should have array of tags" do
4
+ @tags.should have_key('tag')
5
+ @tags['tag'].should be_a_kind_of(Array)
6
+ @tags['tag'].length.should > 0
7
+ end
8
+
9
+ describe "a tag" do
10
+
11
+ before(:each) do
12
+ @tag = @tags['tag'][0]
13
+ end
14
+
15
+ it "should have a url" do
16
+ @tag.should have_key('url')
17
+ end
18
+
19
+ it "should have a name" do
20
+ @tag.should have_key('name')
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+
2
+ describe "Track", :shared => true do
3
+
4
+ it "should have artist" do
5
+ @track.should have_key 'artist'
6
+ @track['artist'].should be_kind_of(Hash)
7
+ @track['artist'].should have_key('mbid')
8
+ @track['artist'].should have_key('name')
9
+ @track['artist'].should have_key('url')
10
+ end
11
+
12
+ it "should have name" do
13
+ @track.should have_key 'name'
14
+ end
15
+
16
+ it "should have mbid" do
17
+ @track.should have_key 'mbid'
18
+ end
19
+
20
+ it "should have url" do
21
+ @track.should have_key 'url'
22
+ end
23
+ end
@@ -0,0 +1,15 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Similar tags for Disco" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tag = Scrobbler2::Tag.new "Disco"
7
+ @similar = @tag.similar
8
+ #puts "Similar: \n\n #{@similar.inspect} \n\n"
9
+ end
10
+
11
+ it "should be an array of artists" do
12
+ pending "Currently Borken xml->hash conversion doesn't like nodes with attributes and children with the same name"
13
+ end
14
+
15
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Top Albums for tag Disco" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tag = Scrobbler2::Tag.new "Disco"
7
+ @albums = @tag.top_albums
8
+ #puts "Top Albums: \n\n #{@albums.inspect} \n\n"
9
+ end
10
+
11
+
12
+ it "should be a Hash" do
13
+ @albums.should be_kind_of(Hash)
14
+ end
15
+
16
+ it "should have tag 'Disco'" do
17
+ @albums["tag"].should == 'Disco'
18
+ end
19
+
20
+ it "should contain an array of albums" do
21
+ @albums["album"].should be_kind_of(Array)
22
+ end
23
+
24
+ describe "Album" do
25
+
26
+ before(:each) do
27
+ @album = @albums['album'][0]
28
+ end
29
+
30
+ it_should_behave_like "Album"
31
+
32
+ it "should have tagcount" do
33
+ @album.should have_key 'tagcount'
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,31 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Top Artists for tag 'Disco'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tag = Scrobbler2::Tag.new "Disco"
7
+ @artists = @tag.top_artists
8
+ end
9
+
10
+ it { @artists.should be_kind_of Hash }
11
+
12
+ it "should have tag 'Disco'" do
13
+ @artists["tag"].should == "Disco"
14
+ end
15
+
16
+ it "should have a list of artists" do
17
+ @artists.should have_key('artist')
18
+ @artists['artist'].should be_kind_of(Array)
19
+ end
20
+
21
+ describe "artist" do
22
+ before(:each) do
23
+ @artist = @artists['artist'][0]
24
+ end
25
+
26
+ it_should_behave_like "Artist"
27
+ it { @artist.should have_key 'tagcount' }
28
+
29
+ end
30
+
31
+ end
@@ -0,0 +1,32 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Top Tags" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tags = Scrobbler2::Tag.top_tags
7
+ end
8
+ it "should return a Hash" do
9
+ @tags.should be_kind_of(Hash)
10
+ end
11
+
12
+ it "should have array of tags" do
13
+ @tags.should have_key('tag')
14
+ @tags['tag'].should be_a_kind_of(Array)
15
+ @tags['tag'].length.should > 0
16
+ end
17
+
18
+ describe "a tag" do
19
+
20
+ before(:each) do
21
+ @tag = @tags['tag'][0]
22
+ end
23
+
24
+ it "should have a url" do
25
+ @tag.should have_key('url')
26
+ end
27
+
28
+ it "should have a name" do
29
+ @tag.should have_key('name')
30
+ end
31
+ end
32
+ end