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,355 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <lfm status="ok">
3
+ <results for="Koko" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
4
+ <opensearch:Query role="request" searchTerms="Koko" startPage="1" />
5
+ <opensearch:totalResults>37</opensearch:totalResults>
6
+ <opensearch:startIndex>0</opensearch:startIndex>
7
+ <opensearch:itemsPerPage>50</opensearch:itemsPerPage>
8
+ <venuematches>
9
+ <venue>
10
+ <id>8777134</id>
11
+ <name>Koko</name>
12
+ <location>
13
+ <city>London</city>
14
+ <country>United Kingdom</country>
15
+ <street>1a Camden High Street, Camden</street>
16
+ <postalcode>NW1 7JE</postalcode>
17
+ <geo:point>
18
+ <geo:lat>51.53469</geo:lat>
19
+ <geo:long>-0.138434</geo:long>
20
+ </geo:point>
21
+ </location>
22
+ <url>http://www.last.fm/venue/8777134</url>
23
+ </venue>
24
+ <venue>
25
+ <id>8839165</id>
26
+ <name>koko</name>
27
+ <location>
28
+ <city>Layer de la Haye</city>
29
+ <country>United Kingdom</country>
30
+ <street></street>
31
+ <postalcode></postalcode>
32
+ <geo:point>
33
+ <geo:lat>51.888862</geo:lat>
34
+ <geo:long>0.895354</geo:long>
35
+ </geo:point>
36
+ </location>
37
+ <url>http://www.last.fm/venue/8839165</url>
38
+ </venue>
39
+ <venue>
40
+ <id>8923849</id>
41
+ <name>Koko's</name>
42
+ <location>
43
+ <city>Burnley</city>
44
+ <country>United Kingdom</country>
45
+ <street></street>
46
+ <postalcode></postalcode>
47
+ <geo:point>
48
+ <geo:lat>53.787316</geo:lat>
49
+ <geo:long>-2.2437</geo:long>
50
+ </geo:point>
51
+ </location>
52
+ <url>http://www.last.fm/venue/8923849</url>
53
+ </venue>
54
+ <venue>
55
+ <id>8965110</id>
56
+ <name>koko</name>
57
+ <location>
58
+ <city>London</city>
59
+ <country>United Kingdom</country>
60
+ <street></street>
61
+ <postalcode></postalcode>
62
+ <geo:point>
63
+ <geo:lat>51.53469</geo:lat>
64
+ <geo:long>-0.138434</geo:long>
65
+ </geo:point>
66
+ </location>
67
+ <url>http://www.last.fm/venue/8965110</url>
68
+ </venue>
69
+ <venue>
70
+ <id>8971623</id>
71
+ <name>Koko</name>
72
+ <location>
73
+ <city>Castelletto Cervo-Biella</city>
74
+ <country>Italy</country>
75
+ <street></street>
76
+ <postalcode></postalcode>
77
+ <geo:point>
78
+ <geo:lat>45.467809</geo:lat>
79
+ <geo:long>8.460168</geo:long>
80
+ </geo:point>
81
+ </location>
82
+ <url>http://www.last.fm/venue/8971623</url>
83
+ </venue>
84
+ <venue>
85
+ <id>8989111</id>
86
+ <name>Koko</name>
87
+ <location>
88
+ <city>Camden, London</city>
89
+ <country>United Kingdom</country>
90
+ <street></street>
91
+ <postalcode></postalcode>
92
+ <geo:point>
93
+ <geo:lat>51.53469</geo:lat>
94
+ <geo:long>-0.138434</geo:long>
95
+ </geo:point>
96
+ </location>
97
+ <url>http://www.last.fm/venue/8989111</url>
98
+ </venue>
99
+ <venue>
100
+ <id>8997379</id>
101
+ <name>koko</name>
102
+ <location>
103
+ <city>Castelletto</city>
104
+ <country>Italy</country>
105
+ <street></street>
106
+ <postalcode></postalcode>
107
+ <geo:point>
108
+ <geo:lat>45.5833333</geo:lat>
109
+ <geo:long>8.5833333</geo:long>
110
+ </geo:point>
111
+ </location>
112
+ <url>http://www.last.fm/venue/8997379</url>
113
+ </venue>
114
+ <venue>
115
+ <id>8877867</id>
116
+ <name>Koko Teatteri</name>
117
+ <location>
118
+ <city>Helsinki</city>
119
+ <country>Finland</country>
120
+ <street></street>
121
+ <postalcode></postalcode>
122
+ <geo:point>
123
+ <geo:lat>60.175745</geo:lat>
124
+ <geo:long>24.950355</geo:long>
125
+ </geo:point>
126
+ </location>
127
+ <url>http://www.last.fm/venue/8877867</url>
128
+ </venue>
129
+ <venue>
130
+ <id>8906962</id>
131
+ <name>Koko Gorilaz</name>
132
+ <location>
133
+ <city>Cardiff</city>
134
+ <country>United Kingdom</country>
135
+ <street></street>
136
+ <postalcode></postalcode>
137
+ <geo:point>
138
+ <geo:lat>51.480283</geo:lat>
139
+ <geo:long>-3.173233</geo:long>
140
+ </geo:point>
141
+ </location>
142
+ <url>http://www.last.fm/venue/8906962</url>
143
+ </venue>
144
+ <venue>
145
+ <id>8913762</id>
146
+ <name>Koko Cocktails</name>
147
+ <location>
148
+ <city>San Francisco, CA</city>
149
+ <country>United States</country>
150
+ <street></street>
151
+ <postalcode></postalcode>
152
+ <geo:point>
153
+ <geo:lat>37.785804</geo:lat>
154
+ <geo:long>-122.420718</geo:long>
155
+ </geo:point>
156
+ </location>
157
+ <url>http://www.last.fm/venue/8913762</url>
158
+ </venue>
159
+ <venue>
160
+ <id>8960307</id>
161
+ <name>koko, camden</name>
162
+ <location>
163
+ <city>london</city>
164
+ <country>United Kingdom</country>
165
+ <street></street>
166
+ <postalcode></postalcode>
167
+ <geo:point>
168
+ <geo:lat>51.53469</geo:lat>
169
+ <geo:long>-0.138434</geo:long>
170
+ </geo:point>
171
+ </location>
172
+ <url>http://www.last.fm/venue/8960307</url>
173
+ </venue>
174
+ <venue>
175
+ <id>8972179</id>
176
+ <name>koko club</name>
177
+ <location>
178
+ <city>Castelletto Cervo (Biella)</city>
179
+ <country>Italy</country>
180
+ <street></street>
181
+ <postalcode></postalcode>
182
+ <geo:point>
183
+ <geo:lat>45.5833333</geo:lat>
184
+ <geo:long>8.5833333</geo:long>
185
+ </geo:point>
186
+ </location>
187
+ <url>http://www.last.fm/venue/8972179</url>
188
+ </venue>
189
+ <venue>
190
+ <id>8987071</id>
191
+ <name>Koko Club</name>
192
+ <location>
193
+ <city>London</city>
194
+ <country>United Kingdom</country>
195
+ <street></street>
196
+ <postalcode></postalcode>
197
+ <geo:point>
198
+ <geo:lat>51.53469</geo:lat>
199
+ <geo:long>-0.138434</geo:long>
200
+ </geo:point>
201
+ </location>
202
+ <url>http://www.last.fm/venue/8987071</url>
203
+ </venue>
204
+ <venue>
205
+ <id>8996214</id>
206
+ <name>Koko Gorillaz</name>
207
+ <location>
208
+ <city>Roath, Cardiff</city>
209
+ <country>United Kingdom</country>
210
+ <street></street>
211
+ <postalcode></postalcode>
212
+ <geo:point>
213
+ <geo:lat>51.485545</geo:lat>
214
+ <geo:long>-3.193589</geo:long>
215
+ </geo:point>
216
+ </location>
217
+ <url>http://www.last.fm/venue/8996214</url>
218
+ </venue>
219
+ <venue>
220
+ <id>9011083</id>
221
+ <name>Koko Club</name>
222
+ <location>
223
+ <city>Castelletto (BI)</city>
224
+ <country>Italy</country>
225
+ <street></street>
226
+ <postalcode></postalcode>
227
+ <geo:point>
228
+ <geo:lat>45.4</geo:lat>
229
+ <geo:long>8.9333333</geo:long>
230
+ </geo:point>
231
+ </location>
232
+ <url>http://www.last.fm/venue/9011083</url>
233
+ </venue>
234
+ <venue>
235
+ <id>9011085</id>
236
+ <name>Koko Club</name>
237
+ <location>
238
+ <city>Castelletto Cervo (BI)</city>
239
+ <country>Italy</country>
240
+ <street>VIA PER COSSATO / A4 USCITA BALOCCO</street>
241
+ <postalcode></postalcode>
242
+ <geo:point>
243
+ <geo:lat>45.5833333</geo:lat>
244
+ <geo:long>8.5833333</geo:long>
245
+ </geo:point>
246
+ </location>
247
+ <url>http://www.last.fm/venue/9011085</url>
248
+ </venue>
249
+ <venue>
250
+ <id>9016513</id>
251
+ <name>KOKO Bar</name>
252
+ <location>
253
+ <city>Katowice</city>
254
+ <country>Poland</country>
255
+ <street>ul. 3go Maja 23</street>
256
+ <postalcode></postalcode>
257
+ <geo:point>
258
+ <geo:lat>50.2302967966042</geo:lat>
259
+ <geo:long>19.0139007568359</geo:long>
260
+ </geo:point>
261
+ </location>
262
+ <url>http://www.last.fm/venue/9016513</url>
263
+ </venue>
264
+ <venue>
265
+ <id>8870061</id>
266
+ <name>KokoTeatteri</name>
267
+ <location>
268
+ <city>Helsinki</city>
269
+ <country>Finland</country>
270
+ <street>Siltavuorenranta 18</street>
271
+ <postalcode></postalcode>
272
+ <geo:point>
273
+ <geo:lat>60.175745</geo:lat>
274
+ <geo:long>24.950355</geo:long>
275
+ </geo:point>
276
+ </location>
277
+ <url>http://www.last.fm/venue/8870061</url>
278
+ </venue>
279
+ <venue>
280
+ <id>8877869</id>
281
+ <name>KokoTeatteri</name>
282
+ <location>
283
+ <city>Helsinki</city>
284
+ <country>Finland</country>
285
+ <street></street>
286
+ <postalcode></postalcode>
287
+ <geo:point>
288
+ <geo:lat>60.175745</geo:lat>
289
+ <geo:long>24.950355</geo:long>
290
+ </geo:point>
291
+ </location>
292
+ <url>http://www.last.fm/venue/8877869</url>
293
+ </venue>
294
+ <venue>
295
+ <id>8951971</id>
296
+ <name>Bajka/Koko-Bongo</name>
297
+ <location>
298
+ <city>Mielno</city>
299
+ <country>Poland</country>
300
+ <street></street>
301
+ <postalcode></postalcode>
302
+ <geo:point>
303
+ <geo:lat>54.3</geo:lat>
304
+ <geo:long>17.1166667</geo:long>
305
+ </geo:point>
306
+ </location>
307
+ <url>http://www.last.fm/venue/8951971</url>
308
+ </venue>
309
+ <venue>
310
+ <id>8958085</id>
311
+ <name>Bajka/Koko-Bongo</name>
312
+ <location>
313
+ <city>Mielno</city>
314
+ <country>Poland</country>
315
+ <street></street>
316
+ <postalcode></postalcode>
317
+ <geo:point>
318
+ <geo:lat>54.2666667</geo:lat>
319
+ <geo:long>16.05</geo:long>
320
+ </geo:point>
321
+ </location>
322
+ <url>http://www.last.fm/venue/8958085</url>
323
+ </venue>
324
+ <venue>
325
+ <id>9017902</id>
326
+ <name>Klub Bajka/Koko-Bongo</name>
327
+ <location>
328
+ <city>Mielno</city>
329
+ <country>Poland</country>
330
+ <street></street>
331
+ <postalcode></postalcode>
332
+ <geo:point>
333
+ <geo:lat>54.2666667</geo:lat>
334
+ <geo:long>16.05</geo:long>
335
+ </geo:point>
336
+ </location>
337
+ <url>http://www.last.fm/venue/9017902</url>
338
+ </venue>
339
+ <venue>
340
+ <id>8965534</id>
341
+ <name>KOKO, 1a Camden High Street</name>
342
+ <location>
343
+ <city>London</city>
344
+ <country>United Kingdom</country>
345
+ <street></street>
346
+ <postalcode></postalcode>
347
+ <geo:point>
348
+ <geo:lat>51.541474</geo:lat>
349
+ <geo:long>-0.145325</geo:long>
350
+ </geo:point>
351
+ </location>
352
+ <url>http://www.last.fm/venue/8965534</url>
353
+ </venue>
354
+ </venuematches>
355
+ </results></lfm>
@@ -0,0 +1,63 @@
1
+ require 'helper'
2
+
3
+ class EventTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ @event = Model::Event.parse(xml("venue_events"), :single => true)
9
+ end
10
+
11
+ test "has an id" do
12
+ assert_equal 968618, @event.id
13
+ end
14
+
15
+ test "has an url" do
16
+ assert_equal "http://www.last.fm/event/968618", @event.url
17
+ end
18
+
19
+ test "has an attendance count" do
20
+ assert_equal 55, @event.attendance_count
21
+ end
22
+
23
+ test "has a description" do
24
+ assert_equal "", @event.description
25
+ end
26
+
27
+ test "has a start time" do
28
+ assert_equal Time.local(2009, 6, 1, 19, 30, 0), @event.starts_at
29
+ end
30
+
31
+ test "has a name" do
32
+ assert_equal "Phoenix", @event.name
33
+ end
34
+
35
+ test "has a review count" do
36
+ assert_equal 0, @event.review_count
37
+ end
38
+
39
+ test "has artists" do
40
+ @event.session = StubSession.new
41
+ artists = @event.artists
42
+ assert_equal 2, @event.artists_raw.size
43
+ assert_equal "Phoenix", @event.artists.first.name
44
+ end
45
+
46
+ test "has a headliner" do
47
+ @event.session = StubSession.new
48
+ assert_equal "Phoenix", @event.headliner.name
49
+ end
50
+
51
+ test "has attendees" do
52
+ @event.session = StubSession.new
53
+ expect_get "method=event.getAttendees&event=968618", :artist_top_fans
54
+ assert @event.attendees.first.kind_of? Model::User
55
+ end
56
+
57
+ test "can be attended by the session user" do
58
+ @facade.stubs(:session => stub(:event_facade => @facade))
59
+ @event.session = @facade.session
60
+ @facade.expects(:attend).with(968618, 0)
61
+ @event.attend
62
+ end
63
+ end
@@ -0,0 +1,45 @@
1
+ require 'helper'
2
+
3
+ class GroupTest < TestCase
4
+ include ProviderTestHelper
5
+
6
+ def setup
7
+ super
8
+ session = StubSession.new
9
+ @group = session.group.build(:name => "lrug")
10
+ end
11
+
12
+ test "has a name" do
13
+ assert_equal "lrug", @group.name
14
+ end
15
+
16
+ test "has members" do
17
+ expect_get "method=group.getMembers&group=lrug", :group_members
18
+ assert_equal 34, @group.members.size
19
+ assert @group.members.first.kind_of? Model::User
20
+ end
21
+
22
+ test "has albums" do
23
+ expect_get "method=group.getWeeklyAlbumChart&group=lrug", :group_weekly_album_chart
24
+ assert_equal 250, @group.album_chart.size
25
+ assert @group.album_chart.first.kind_of? Model::Album
26
+ end
27
+
28
+ test "has artists" do
29
+ expect_get "method=group.getWeeklyArtistChart&group=lrug", :group_weekly_artist_chart
30
+ assert_equal 100, @group.artist_chart.size
31
+ assert @group.artist_chart.first.kind_of? Model::Artist
32
+ end
33
+
34
+ test "has tracks" do
35
+ expect_get "method=group.getWeeklyTrackChart&group=lrug", :group_weekly_track_chart
36
+ assert_equal 100, @group.track_chart.size
37
+ assert @group.track_chart.first.kind_of? Model::Track
38
+ end
39
+
40
+ test "has chart dates" do
41
+ expect_get "method=group.getWeeklyChartList&group=lrug", :tag_weekly_chart_list
42
+ assert_equal 53, @group.chart_dates.size
43
+ assert_equal (Time.at(1243166400)..Time.at(1243771200)), @group.chart_dates.first
44
+ end
45
+ end