shortwave 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/.document +5 -0
  2. data/.gitignore +10 -0
  3. data/.gitmodules +3 -0
  4. data/LICENSE +20 -0
  5. data/README.rdoc +74 -0
  6. data/Rakefile +133 -0
  7. data/VERSION +1 -0
  8. data/lib/shortwave.rb +12 -0
  9. data/lib/shortwave/authentication.rb +107 -0
  10. data/lib/shortwave/facade.rb +3 -0
  11. data/lib/shortwave/facade/build/facade_builder.rb +199 -0
  12. data/lib/shortwave/facade/build/facade_template.erb +17 -0
  13. data/lib/shortwave/facade/lastfm.rb +878 -0
  14. data/lib/shortwave/facade/remote.rb +86 -0
  15. data/lib/shortwave/model/album.rb +33 -0
  16. data/lib/shortwave/model/artist.rb +62 -0
  17. data/lib/shortwave/model/base_model.rb +112 -0
  18. data/lib/shortwave/model/chart_dates.rb +15 -0
  19. data/lib/shortwave/model/comparison.rb +15 -0
  20. data/lib/shortwave/model/event.rb +55 -0
  21. data/lib/shortwave/model/group.rb +26 -0
  22. data/lib/shortwave/model/location.rb +45 -0
  23. data/lib/shortwave/model/playlist.rb +36 -0
  24. data/lib/shortwave/model/shout.rb +21 -0
  25. data/lib/shortwave/model/tag.rb +47 -0
  26. data/lib/shortwave/model/track.rb +71 -0
  27. data/lib/shortwave/model/user.rb +70 -0
  28. data/lib/shortwave/model/venue.rb +37 -0
  29. data/lib/shortwave/model/weekly_charts.rb +31 -0
  30. data/lib/shortwave/providers.rb +161 -0
  31. data/shortwave.gemspec +178 -0
  32. data/test/authentication_test.rb +64 -0
  33. data/test/build/build_test.rb +25 -0
  34. data/test/build/data/intro.yml +2 -0
  35. data/test/build/data/screens/album_addTags.html +1238 -0
  36. data/test/build/data/screens/intro_truncated.html +426 -0
  37. data/test/build/data/screens/tasteometer_compare.html +1274 -0
  38. data/test/build/data/screens/user_getLovedTracks.html +1278 -0
  39. data/test/build/data/screens/venue_search.html +1261 -0
  40. data/test/build/facade_builder_test.rb +23 -0
  41. data/test/build/parameter_test.rb +43 -0
  42. data/test/build/remote_method_test.rb +47 -0
  43. data/test/build/ruby_class_test.rb +12 -0
  44. data/test/build/ruby_method_test.rb +137 -0
  45. data/test/helper.rb +35 -0
  46. data/test/model/album_test.rb +62 -0
  47. data/test/model/artist_test.rb +103 -0
  48. data/test/model/chart_dates_test.rb +11 -0
  49. data/test/model/comparison_test.rb +18 -0
  50. data/test/model/data/album_info.xml +38 -0
  51. data/test/model/data/album_search.xml +210 -0
  52. data/test/model/data/artist_info.xml +58 -0
  53. data/test/model/data/artist_search.xml +109 -0
  54. data/test/model/data/artist_shouts.xml +546 -0
  55. data/test/model/data/artist_top_fans.xml +405 -0
  56. data/test/model/data/event_info.xml +47 -0
  57. data/test/model/data/group_members.xml +242 -0
  58. data/test/model/data/group_weekly_album_chart.xml +1754 -0
  59. data/test/model/data/group_weekly_artist_chart.xml +604 -0
  60. data/test/model/data/group_weekly_track_chart.xml +1005 -0
  61. data/test/model/data/location_events.xml +383 -0
  62. data/test/model/data/ok.xml +2 -0
  63. data/test/model/data/playlist_fetch.xml +227 -0
  64. data/test/model/data/tag_search.xml +110 -0
  65. data/test/model/data/tag_similar.xml +254 -0
  66. data/test/model/data/tag_top_albums.xml +805 -0
  67. data/test/model/data/tag_top_artists.xml +605 -0
  68. data/test/model/data/tag_top_tags.xml +1254 -0
  69. data/test/model/data/tag_top_tracks.xml +843 -0
  70. data/test/model/data/tag_weekly_chart_list.xml +57 -0
  71. data/test/model/data/tasteometer_compare.xml +54 -0
  72. data/test/model/data/track_info.xml +53 -0
  73. data/test/model/data/track_search.xml +195 -0
  74. data/test/model/data/user_chartlist.xml +90 -0
  75. data/test/model/data/user_info.xml +16 -0
  76. data/test/model/data/user_neighbours.xml +484 -0
  77. data/test/model/data/user_playlists.xml +17 -0
  78. data/test/model/data/user_recent_tracks.xml +124 -0
  79. data/test/model/data/user_recommended_artists.xml +454 -0
  80. data/test/model/data/user_shouts.xml +9 -0
  81. data/test/model/data/user_weekly_artist_chart.xml +478 -0
  82. data/test/model/data/venue_events.xml +556 -0
  83. data/test/model/data/venue_past_events.xml +1778 -0
  84. data/test/model/data/venue_search.xml +355 -0
  85. data/test/model/event_test.rb +63 -0
  86. data/test/model/group_test.rb +45 -0
  87. data/test/model/location_test.rb +25 -0
  88. data/test/model/playlist_test.rb +51 -0
  89. data/test/model/shout_test.rb +23 -0
  90. data/test/model/tag_test.rb +39 -0
  91. data/test/model/track_test.rb +67 -0
  92. data/test/model/user_test.rb +125 -0
  93. data/test/model/venue_test.rb +60 -0
  94. data/test/provider/album_provider_test.rb +26 -0
  95. data/test/provider/artist_provider_test.rb +25 -0
  96. data/test/provider/group_provider_test.rb +9 -0
  97. data/test/provider/location_provider_test.rb +9 -0
  98. data/test/provider/playlist_provider_test.rb +12 -0
  99. data/test/provider/tag_provider_test.rb +24 -0
  100. data/test/provider/track_provider_test.rb +26 -0
  101. data/test/provider/user_provider_test.rb +11 -0
  102. data/test/provider/venue_provider_test.rb +15 -0
  103. data/test/provider_test_helper.rb +27 -0
  104. data/test/remote_test.rb +26 -0
  105. metadata +209 -0
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class GroupProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can build a group" do
7
+ assert StubSession.new.group.build(:name => "mnml").kind_of?(Shortwave::Model::Group)
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'helper'
2
+
3
+ class LocationProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can build a location" do
7
+ assert StubSession.new.location.build(:city => "london").kind_of?(Shortwave::Model::Location)
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ require 'helper'
2
+
3
+ class PlaylistProviderTest < Test::Unit::TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can create a playlist for a user" do
7
+ f = Facade::Playlist.new(stub())
8
+ # Ugly, but fakeweb can't cope with post yet
9
+ f.expects(:post).with(:session, :title => "test", :description => "foo", :method => "playlist.create").returns(xml(:playlist_fetch))
10
+ assert Provider::PlaylistProvider.new(f).create("test", "foo").kind_of?(Shortwave::Model::Playlist)
11
+ end
12
+ end
@@ -0,0 +1,24 @@
1
+ require 'helper'
2
+
3
+ class TagProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can get a single tag" do
7
+ expect_get "method=tag.search&tag=disco", :tag_search
8
+ assert_equal "disco", StubSession.new.tag.get("disco").name
9
+ end
10
+
11
+ test "can build a tag from attributes" do
12
+ assert_equal "disco", StubSession.new.tag.build(:name => "disco").name
13
+ end
14
+
15
+ test "can get most popular tags" do
16
+ expect_get "method=tag.getTopTags", :tag_top_tags
17
+ assert_equal 250, StubSession.new.tag.popular.size
18
+ end
19
+
20
+ test "can search for a tag" do
21
+ expect_get "method=tag.search&tag=disco", :tag_search
22
+ assert_equal 20, StubSession.new.tag.search("disco").size
23
+ end
24
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ class TrackProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can get a track by artist & track name" do
7
+ expect_get "method=track.getInfo&artist=Led%20Zeppelin&track=Stairway%20to%20Heaven", :track_info
8
+ assert StubSession.new.track.get("Led Zeppelin", "Stairway to Heaven").kind_of?(Shortwave::Model::Track)
9
+ end
10
+
11
+ test "can get a track by mbid" do
12
+ expect_get "method=track.getInfo&mbid=464efacc-a133-4ae6-a9ff-7573c448eb32", :track_info
13
+ assert StubSession.new.track.get_by_id("464efacc-a133-4ae6-a9ff-7573c448eb32").kind_of?(Shortwave::Model::Track)
14
+ end
15
+
16
+ test "can get a track by musicbrainz mbid model" do
17
+ mbid = stub(:uuid => "464efacc-a133-4ae6-a9ff-7573c448eb32")
18
+ expect_get "method=track.getInfo&mbid=464efacc-a133-4ae6-a9ff-7573c448eb32", :track_info
19
+ assert StubSession.new.track.get_by_id(mbid).kind_of?(Shortwave::Model::Track)
20
+ end
21
+
22
+ test "can search for a track" do
23
+ expect_get "method=track.search&track=Stairway%20to%20heaven", :track_search
24
+ assert 20, StubSession.new.track.search("Stairway to heaven").size
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ require 'helper'
2
+
3
+ class UserProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can provide the logged in user" do
7
+ expect_get "method=user.getInfo", :user_info
8
+ assert_equal "Roland Swingler", StubSession.new.user.logged_in_user.real_name
9
+ end
10
+ end
11
+
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ class VenueProviderTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ test "can search for a venue" do
7
+ expect_get "method=venue.search&venue=Koko", :venue_search
8
+ assert_equal 23, StubSession.new.venue.search("Koko").size
9
+ end
10
+
11
+ test "can search for a venue limited by country" do
12
+ expect_get "method=venue.search&venue=Koko&country=gb", :venue_search
13
+ assert_equal 23, StubSession.new.venue.search("Koko", :gb).size
14
+ end
15
+ end
@@ -0,0 +1,27 @@
1
+ class StubSession
2
+ include Provider::ProviderMethods
3
+
4
+ def merge!(*args)
5
+ end
6
+
7
+ def signed_in?
8
+ true
9
+ end
10
+ end
11
+
12
+ module ProviderTestHelper
13
+ def setup
14
+ super
15
+ @facade = mock()
16
+ @facade.stubs(:session).returns(StubSession.new)
17
+ end
18
+
19
+ def xml(file)
20
+ File.read(File.dirname(__FILE__) + "/model/data/#{file}.xml")
21
+ end
22
+
23
+ def expect_get( params, return_xml)
24
+ url = "http://ws.audioscrobbler.com/2.0/?" + params
25
+ FakeWeb.register_uri :get, url, :string => xml(return_xml)
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ class RemoteTest < TestCase
4
+ def setup
5
+ super
6
+ @auth = mock()
7
+ @auth.expects(:merge!)
8
+ end
9
+
10
+ test "get methods include data" do
11
+ FakeWeb.register_uri :get, "http://ws.audioscrobbler.com/2.0/?foo=bar", :string => "ok"
12
+ data = Facade::Remote.new(@auth).send(:get, :standard, {:foo => "bar"})
13
+ assert_equal "ok", data
14
+ end
15
+
16
+ test "parameters are uri escaped correctly" do
17
+ FakeWeb.register_uri :get, "http://ws.audioscrobbler.com/2.0/?foo=bar%26baz%20ok", :string => "ok"
18
+ data = Facade::Remote.new(@auth).send(:get, :standard, {:foo => "bar&baz ok"})
19
+ assert_equal "ok", data
20
+ end
21
+
22
+ test "methods raise RemoteError on http error response" do
23
+ FakeWeb.register_uri :get, "http://ws.audioscrobbler.com/2.0/?", :string => "boom", :status => 500
24
+ assert_raise(Facade::RemoteError) { Facade::Remote.new(@auth).send(:get, :standard, {}) }
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,209 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shortwave
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Roland Swingler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-06-11 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rest-client
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.9.2
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: nokogiri
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.3
34
+ version:
35
+ description:
36
+ email: roland.swingler@gmail.com
37
+ executables: []
38
+
39
+ extensions: []
40
+
41
+ extra_rdoc_files:
42
+ - LICENSE
43
+ - README.rdoc
44
+ files:
45
+ - .document
46
+ - .gitignore
47
+ - .gitmodules
48
+ - LICENSE
49
+ - README.rdoc
50
+ - Rakefile
51
+ - VERSION
52
+ - lib/shortwave.rb
53
+ - lib/shortwave/authentication.rb
54
+ - lib/shortwave/facade.rb
55
+ - lib/shortwave/facade/build/facade_builder.rb
56
+ - lib/shortwave/facade/build/facade_template.erb
57
+ - lib/shortwave/facade/lastfm.rb
58
+ - lib/shortwave/facade/remote.rb
59
+ - lib/shortwave/model/album.rb
60
+ - lib/shortwave/model/artist.rb
61
+ - lib/shortwave/model/base_model.rb
62
+ - lib/shortwave/model/chart_dates.rb
63
+ - lib/shortwave/model/comparison.rb
64
+ - lib/shortwave/model/event.rb
65
+ - lib/shortwave/model/group.rb
66
+ - lib/shortwave/model/location.rb
67
+ - lib/shortwave/model/playlist.rb
68
+ - lib/shortwave/model/shout.rb
69
+ - lib/shortwave/model/tag.rb
70
+ - lib/shortwave/model/track.rb
71
+ - lib/shortwave/model/user.rb
72
+ - lib/shortwave/model/venue.rb
73
+ - lib/shortwave/model/weekly_charts.rb
74
+ - lib/shortwave/providers.rb
75
+ - shortwave.gemspec
76
+ - test/authentication_test.rb
77
+ - test/build/build_test.rb
78
+ - test/build/data/intro.yml
79
+ - test/build/data/screens/album_addTags.html
80
+ - test/build/data/screens/intro_truncated.html
81
+ - test/build/data/screens/tasteometer_compare.html
82
+ - test/build/data/screens/user_getLovedTracks.html
83
+ - test/build/data/screens/venue_search.html
84
+ - test/build/facade_builder_test.rb
85
+ - test/build/parameter_test.rb
86
+ - test/build/remote_method_test.rb
87
+ - test/build/ruby_class_test.rb
88
+ - test/build/ruby_method_test.rb
89
+ - test/helper.rb
90
+ - test/model/album_test.rb
91
+ - test/model/artist_test.rb
92
+ - test/model/chart_dates_test.rb
93
+ - test/model/comparison_test.rb
94
+ - test/model/data/album_info.xml
95
+ - test/model/data/album_search.xml
96
+ - test/model/data/artist_info.xml
97
+ - test/model/data/artist_search.xml
98
+ - test/model/data/artist_shouts.xml
99
+ - test/model/data/artist_top_fans.xml
100
+ - test/model/data/event_info.xml
101
+ - test/model/data/group_members.xml
102
+ - test/model/data/group_weekly_album_chart.xml
103
+ - test/model/data/group_weekly_artist_chart.xml
104
+ - test/model/data/group_weekly_track_chart.xml
105
+ - test/model/data/location_events.xml
106
+ - test/model/data/ok.xml
107
+ - test/model/data/playlist_fetch.xml
108
+ - test/model/data/tag_search.xml
109
+ - test/model/data/tag_similar.xml
110
+ - test/model/data/tag_top_albums.xml
111
+ - test/model/data/tag_top_artists.xml
112
+ - test/model/data/tag_top_tags.xml
113
+ - test/model/data/tag_top_tracks.xml
114
+ - test/model/data/tag_weekly_chart_list.xml
115
+ - test/model/data/tasteometer_compare.xml
116
+ - test/model/data/track_info.xml
117
+ - test/model/data/track_search.xml
118
+ - test/model/data/user_chartlist.xml
119
+ - test/model/data/user_info.xml
120
+ - test/model/data/user_neighbours.xml
121
+ - test/model/data/user_playlists.xml
122
+ - test/model/data/user_recent_tracks.xml
123
+ - test/model/data/user_recommended_artists.xml
124
+ - test/model/data/user_shouts.xml
125
+ - test/model/data/user_weekly_artist_chart.xml
126
+ - test/model/data/venue_events.xml
127
+ - test/model/data/venue_past_events.xml
128
+ - test/model/data/venue_search.xml
129
+ - test/model/event_test.rb
130
+ - test/model/group_test.rb
131
+ - test/model/location_test.rb
132
+ - test/model/playlist_test.rb
133
+ - test/model/shout_test.rb
134
+ - test/model/tag_test.rb
135
+ - test/model/track_test.rb
136
+ - test/model/user_test.rb
137
+ - test/model/venue_test.rb
138
+ - test/provider/album_provider_test.rb
139
+ - test/provider/artist_provider_test.rb
140
+ - test/provider/group_provider_test.rb
141
+ - test/provider/location_provider_test.rb
142
+ - test/provider/playlist_provider_test.rb
143
+ - test/provider/tag_provider_test.rb
144
+ - test/provider/track_provider_test.rb
145
+ - test/provider/user_provider_test.rb
146
+ - test/provider/venue_provider_test.rb
147
+ - test/provider_test_helper.rb
148
+ - test/remote_test.rb
149
+ has_rdoc: true
150
+ homepage: http://shortwave.rubyforge.org
151
+ licenses: []
152
+
153
+ post_install_message:
154
+ rdoc_options:
155
+ - --charset=UTF-8
156
+ require_paths:
157
+ - lib
158
+ required_ruby_version: !ruby/object:Gem::Requirement
159
+ requirements:
160
+ - - ">="
161
+ - !ruby/object:Gem::Version
162
+ version: "0"
163
+ version:
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: "0"
169
+ version:
170
+ requirements: []
171
+
172
+ rubyforge_project: shortwave
173
+ rubygems_version: 1.3.2
174
+ signing_key:
175
+ specification_version: 3
176
+ summary: A Last.fm API wrapper
177
+ test_files:
178
+ - test/helper.rb
179
+ - test/model/location_test.rb
180
+ - test/model/tag_test.rb
181
+ - test/model/track_test.rb
182
+ - test/model/artist_test.rb
183
+ - test/model/album_test.rb
184
+ - test/model/playlist_test.rb
185
+ - test/model/venue_test.rb
186
+ - test/model/group_test.rb
187
+ - test/model/shout_test.rb
188
+ - test/model/user_test.rb
189
+ - test/model/chart_dates_test.rb
190
+ - test/model/event_test.rb
191
+ - test/model/comparison_test.rb
192
+ - test/provider_test_helper.rb
193
+ - test/provider/location_provider_test.rb
194
+ - test/provider/track_provider_test.rb
195
+ - test/provider/user_provider_test.rb
196
+ - test/provider/venue_provider_test.rb
197
+ - test/provider/tag_provider_test.rb
198
+ - test/provider/group_provider_test.rb
199
+ - test/provider/playlist_provider_test.rb
200
+ - test/provider/artist_provider_test.rb
201
+ - test/provider/album_provider_test.rb
202
+ - test/authentication_test.rb
203
+ - test/remote_test.rb
204
+ - test/build/remote_method_test.rb
205
+ - test/build/facade_builder_test.rb
206
+ - test/build/ruby_class_test.rb
207
+ - test/build/ruby_method_test.rb
208
+ - test/build/parameter_test.rb
209
+ - test/build/build_test.rb