shortwave 0.0.1

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 (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