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,33 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Tracks for tag 'Disco'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tag = Scrobbler2::Tag.new "Disco"
7
+ @tracks = @tag.top_tracks
8
+ end
9
+
10
+ it "should be hash" do
11
+ @tracks.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have tag 'Disco'" do
15
+ @tracks["tag"].should == "Disco"
16
+ end
17
+
18
+ it "should have a list of tracks" do
19
+ @tracks.should have_key('track')
20
+ @tracks['track'].should be_kind_of(Array)
21
+ end
22
+
23
+ describe "track" do
24
+ before(:each) do
25
+ @track = @tracks['track'][0]
26
+ end
27
+
28
+ it_should_behave_like "Track"
29
+ it { @track.should have_key 'tagcount' }
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Weekly artist chart for tag 'Disco'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @group = Scrobbler2::Tag.new "Disco"
7
+ @chart = @group.weekly_artist_chart
8
+ end
9
+
10
+ it "should be hash" do
11
+ @chart.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have tag 'Disco'" do
15
+ @chart["tag"].should == "Disco"
16
+ end
17
+
18
+ it "should have from" do
19
+ @chart.should have_key("from")
20
+ end
21
+
22
+ it "should have to" do
23
+ @chart.should have_key("to")
24
+ end
25
+
26
+ it "should have a list of artists" do
27
+ @chart.should have_key('artist')
28
+ @chart['artist'].should be_kind_of(Array)
29
+ end
30
+
31
+ describe "artist" do
32
+ before(:each) do
33
+ @artist = @chart['artist'][0]
34
+ end
35
+
36
+ it "should have name" do
37
+ @artist.should have_key 'name'
38
+ end
39
+
40
+ it "should have mbid" do
41
+ @artist.should have_key 'mbid'
42
+ end
43
+
44
+ it "should have weight" do
45
+ @artist.should have_key 'weight'
46
+ end
47
+
48
+ it "should have url" do
49
+ @artist.should have_key 'url'
50
+ end
51
+
52
+ end
53
+
54
+ end
@@ -0,0 +1,39 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Weekly chart list for tag 'Disco''" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @tag = Scrobbler2::Tag.new 'Disco'
7
+ @list = @tag.weekly_chart_list
8
+ end
9
+
10
+ it "should be hash" do
11
+ @list.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have tag 'Disco'" do
15
+ @list["tag"].should == "Disco"
16
+ end
17
+
18
+
19
+ it "should have a list of charts" do
20
+ @list.should have_key('chart')
21
+ @list['chart'].should be_kind_of(Array)
22
+ end
23
+
24
+ describe "chart" do
25
+ before(:each) do
26
+ @chart = @list['chart'][0]
27
+ end
28
+
29
+ it "should have from" do
30
+ @chart.should have_key 'from'
31
+ end
32
+
33
+ it "should have to" do
34
+ @chart.should have_key 'to'
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,15 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'spec/interop/test'
4
+
5
+ $: << File.dirname(__FILE__) + "/../../lib/"
6
+
7
+ require 'scrobbler2'
8
+ Dir.glob(File.dirname(__FILE__) + "/shared/*.rb") { |shared| require shared }
9
+
10
+ # These are real, so that the tests will pass.
11
+ # The session-key allows authenticated access as the last.fm user 'scrobbler2'
12
+ # Please do not use them in your own apps.
13
+ Scrobbler2::Base.api_key = "c62652cbaabd91e0553c7b415c5a3dbc"
14
+ Scrobbler2::Base.api_secret = "03c60c8b07bab6f8e91675d8e16fcd0c"
15
+ Scrobbler2::Base.session_key = "91518cf316876a405f3f8194724a3c6e";
@@ -0,0 +1,47 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Track info for Blackened" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @scrobbler_track = Scrobbler2::Track.new "Metallica", "Blackened"
7
+ @track = @scrobbler_track.info
8
+ # puts "INFO: #{@info.inspect} \n"
9
+ end
10
+
11
+ it "should be hash" do
12
+ @track.should be_kind_of Hash
13
+ end
14
+
15
+ it_should_behave_like "Track"
16
+
17
+ it { @track.should have_key 'listeners' }
18
+ it { @track.should have_key 'playcount' }
19
+ it { @track.should have_key 'duration' }
20
+ it { @track.should have_key 'streamable' }
21
+
22
+ describe "Album" do
23
+
24
+ before(:each) do
25
+ @album = @track['album']
26
+ end
27
+
28
+ it_should_behave_like "Album with simple artist and title"
29
+ end
30
+
31
+ it "should have array of tags as toptags" do
32
+ @track.should have_key 'toptags'
33
+ @track['toptags'].should have_key 'tag'
34
+ @track['toptags']['tag'].should be_kind_of(Array)
35
+ end
36
+
37
+ describe "tag" do
38
+ before(:each) do
39
+ @tag = @track['toptags']['tag'][0]
40
+ end
41
+
42
+ it { @tag.should have_key 'name' }
43
+ it { @tag.should have_key 'url' }
44
+
45
+ end
46
+
47
+ end
@@ -0,0 +1,22 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Similar tracks info for Blackened" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @scrobbler_track = Scrobbler2::Track.new "Metallica", "Blackened"
7
+ @similar = @scrobbler_track.similar
8
+ puts "Similar: #{@similar.inspect} \n"
9
+ end
10
+
11
+ it "should be hash" do
12
+ @similar.should be_kind_of Hash
13
+ end
14
+
15
+ it "should have a list of tracks" do
16
+ @similar.should have_key 'track'
17
+ pending "parser falling over attribute and child with same name" do
18
+ @similar['track'].should be_kind_of(Array)
19
+ end
20
+ end
21
+
22
+ end
@@ -0,0 +1,23 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "top_fans for track Metallica - Blackened" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @track = Scrobbler2::Track.new "Metallic", "Blackened"
7
+ @fans = @track.top_fans
8
+ end
9
+
10
+ it "should be hash" do
11
+ @fans.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have artist" do
15
+ @fans.should have_key('artist')
16
+ end
17
+
18
+ it "should have track" do
19
+ @fans.should have_key('track')
20
+ end
21
+
22
+ it_should_behave_like "Top Fans"
23
+ end
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "top_tags for track Metallica - Blackened" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @track = Scrobbler2::Track.new "Metallica", "Blackened"
7
+ @tags = @track.top_tags
8
+ end
9
+
10
+ it "should be hash" do
11
+ @tags.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have artist" do
15
+ @tags.should have_key('artist')
16
+ end
17
+
18
+ it "should have track" do
19
+ @tags.should have_key('track')
20
+ end
21
+
22
+ it_should_behave_like "Top Tags"
23
+
24
+ end
@@ -0,0 +1,27 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "events for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @events = @user.events
8
+ end
9
+
10
+ it "should be hash" do
11
+ @events.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have user" do
15
+ @events.should have_key('user')
16
+ @events['user'].should == "gingerhendrix"
17
+ end
18
+
19
+ it "should have a list of events" do
20
+ @events.should have_key('event')
21
+ @events['event'].should be_kind_of(Array)
22
+ end
23
+
24
+
25
+
26
+
27
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "friends for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @friends = @user.friends
8
+ end
9
+
10
+ it "should be hash" do
11
+ @friends.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "User info for gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @info = @user.info
8
+ end
9
+
10
+ it "should be hash" do
11
+ @info.should be_kind_of Hash
12
+ end
13
+
14
+ it "should have name 'scrobbler2'" do
15
+ @info["name"].should == "scrobbler2"
16
+ end
17
+
18
+
19
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "loved_tracks for user ..." do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "..."
7
+ @loved_tracks = @user.loved_tracks
8
+ end
9
+
10
+ it "should be hash" do
11
+ @loved_tracks.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "neighbours for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @neighbours = @user.neighbours
8
+ end
9
+
10
+ it "should be hash" do
11
+ @neighbours.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "past_events for user 'gingerhendrix'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @past_events = @user.past_events
8
+ end
9
+
10
+ it "should be hash" do
11
+ @past_events.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "playlists for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @playlists = @user.playlists
8
+ end
9
+
10
+ it "should be hash" do
11
+ @playlists.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "recent_tracks for user 'gingerhendrix'" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @recent_tracks = @user.recent_tracks
8
+ end
9
+
10
+ it "should be hash" do
11
+ @recent_tracks.should be_kind_of Hash
12
+ end
13
+
14
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "recommended_artists for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @recommended_artists = @user.recommended_artists
8
+ end
9
+
10
+ it "should be hash" do
11
+ pending "Auth doesn't seem to be working" do
12
+ @recommended_artists.should be_kind_of Hash
13
+ end
14
+ end
15
+
16
+ end
@@ -0,0 +1,16 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "recommended_events for user gingerhendrix" do
4
+
5
+ before(:all) do #We only want to hit the webservice once.
6
+ @user = Scrobbler2::User.new "gingerhendrix"
7
+ @recommended_events = @user.recommended_events
8
+ end
9
+
10
+ it "should be hash" do
11
+ pending "auth doesn't seem to be working" do
12
+ @recommended_events.should be_kind_of Hash
13
+ end
14
+ end
15
+
16
+ end