play 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/Gemfile +2 -0
  2. data/Gemfile.lock +87 -0
  3. data/README.md +139 -0
  4. data/Rakefile +185 -0
  5. data/bin/play +49 -0
  6. data/config.ru +10 -0
  7. data/db/migrate/01_create_schema.rb +55 -0
  8. data/lib/play.rb +73 -0
  9. data/lib/play/album.rb +6 -0
  10. data/lib/play/app.rb +118 -0
  11. data/lib/play/app/api.rb +110 -0
  12. data/lib/play/artist.rb +21 -0
  13. data/lib/play/client.rb +67 -0
  14. data/lib/play/core_ext/hash.rb +6 -0
  15. data/lib/play/history.rb +7 -0
  16. data/lib/play/library.rb +58 -0
  17. data/lib/play/office.rb +34 -0
  18. data/lib/play/song.rb +97 -0
  19. data/lib/play/templates/album_songs.mustache +5 -0
  20. data/lib/play/templates/artist_songs.mustache +5 -0
  21. data/lib/play/templates/index.mustache +18 -0
  22. data/lib/play/templates/layout.mustache +23 -0
  23. data/lib/play/templates/now_playing.mustache +5 -0
  24. data/lib/play/templates/play_history.mustache +3 -0
  25. data/lib/play/templates/profile.mustache +24 -0
  26. data/lib/play/templates/search.mustache +3 -0
  27. data/lib/play/templates/show_song.mustache +9 -0
  28. data/lib/play/templates/song.mustache +21 -0
  29. data/lib/play/user.rb +59 -0
  30. data/lib/play/views/album_songs.rb +9 -0
  31. data/lib/play/views/artist_songs.rb +9 -0
  32. data/lib/play/views/index.rb +9 -0
  33. data/lib/play/views/layout.rb +6 -0
  34. data/lib/play/views/now_playing.rb +17 -0
  35. data/lib/play/views/play_history.rb +9 -0
  36. data/lib/play/views/profile.rb +9 -0
  37. data/lib/play/views/search.rb +9 -0
  38. data/lib/play/views/show_song.rb +19 -0
  39. data/lib/play/vote.rb +7 -0
  40. data/play.gemspec +129 -0
  41. data/play.yml.example +22 -0
  42. data/public/css/base.css +129 -0
  43. data/test/helper.rb +33 -0
  44. data/test/spec/mini.rb +24 -0
  45. data/test/test_api.rb +118 -0
  46. data/test/test_app.rb +57 -0
  47. data/test/test_artist.rb +15 -0
  48. data/test/test_client.rb +11 -0
  49. data/test/test_library.rb +19 -0
  50. data/test/test_office.rb +26 -0
  51. data/test/test_play.rb +17 -0
  52. data/test/test_song.rb +78 -0
  53. data/test/test_user.rb +21 -0
  54. metadata +299 -0
data/test/test_app.rb ADDED
@@ -0,0 +1,57 @@
1
+ require 'helper'
2
+ include Rack::Test::Methods
3
+
4
+ def app
5
+ Play::App
6
+ end
7
+
8
+ context "App" do
9
+ fixtures do
10
+ @artist = Artist.create(:name => 'Justice')
11
+ @song = Song.create(:title => 'Stress', :artist => @artist)
12
+ end
13
+
14
+ setup do
15
+ @user = Play::User.new(:login => 'holman',
16
+ :email => 'holman@example.com',
17
+ :office_string => 'holman')
18
+ Play::App.any_instance.stubs(:current_user).returns(@user)
19
+ end
20
+
21
+ test "/" do
22
+ get '/'
23
+ assert last_response.body.include?("@holman")
24
+ assert last_response.body.include?("queue is empty")
25
+ end
26
+
27
+ test "/login" do
28
+ get '/login'
29
+ assert last_response.redirect?
30
+ end
31
+
32
+ test "/auth/github/callback" do
33
+ Play::User.expects(:authenticate).with('trololol').returns(@user)
34
+ auth = { 'omniauth.auth' => {'user_info' => 'trololol'} }
35
+ get "/auth/github/callback", nil, auth
36
+ assert last_response.redirect?
37
+ end
38
+
39
+ test "/now_playing" do
40
+ Play.expects(:now_playing).returns(@song)
41
+ get "/now_playing"
42
+ assert last_response.body.include?("Stress")
43
+ end
44
+
45
+ # test "/add existing song" do
46
+ # @song = Play::Song.new(:title => 'Stress')
47
+ # Play::Song.any_instance.expects(:enqueue!)
48
+ # get "/add/#{@song.id}"
49
+ # end
50
+ #
51
+ # test "/remove existing song" do
52
+ # @song = Play::Song.new(:title => 'Stress')
53
+ # Play::Song.any_instance.expects(:dequeue!)
54
+ # get "/remove/#{@song.id}"
55
+ # end
56
+
57
+ end
@@ -0,0 +1,15 @@
1
+ require 'helper'
2
+
3
+ context "Artist" do
4
+ fixtures do
5
+ @artist = Play::Artist.create(:name => "Justice")
6
+ @song = Play::Song.create(:title => "Stress", :artist => @artist)
7
+ @user = User.create
8
+ end
9
+
10
+ test "enqueueing ten songs" do
11
+ Song.any_instance.expects(:enqueue!).with(@user).times(1)
12
+ @artist.enqueue!(@user)
13
+ end
14
+
15
+ end
@@ -0,0 +1,11 @@
1
+ require 'helper'
2
+
3
+ context "Client" do
4
+ setup do
5
+ end
6
+
7
+ test "volume" do
8
+ Client.stubs(:system).returns(true)
9
+ Client.volume(1)
10
+ end
11
+ end
@@ -0,0 +1,19 @@
1
+ require 'helper'
2
+
3
+ context "Library" do
4
+ fixtures do
5
+ end
6
+
7
+ test "imports a song" do
8
+ Library.import_song('/tmp/path')
9
+ assert_equal 1, Play::Song.count
10
+ end
11
+
12
+ test "fs_songs" do
13
+ FileUtils.mkdir_p '/tmp/play'
14
+ FileUtils.touch '/tmp/play/song_1'
15
+ FileUtils.touch '/tmp/play/song_2'
16
+ Play.stubs(:path).returns('/tmp/play')
17
+ assert_equal 2, Library.fs_songs.size
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ require 'helper'
2
+
3
+ context "Office" do
4
+ setup do
5
+ end
6
+
7
+ test "url returns config office_url" do
8
+ Play.expects(:config).returns({'office_url' => 'http://zachholman.com'})
9
+ assert_equal 'http://zachholman.com', Play::Office.url
10
+ end
11
+
12
+ test "user string returns a string o' user data" do
13
+ object = "lol"
14
+ object.stubs(:read).returns("holman,kneath")
15
+ Play::Office.stubs(:open).returns(object)
16
+ assert_equal "holman,kneath", Play::Office.user_string
17
+ end
18
+
19
+ test "users are returned based on office string" do
20
+ holman = Play::User.create(:office_string => 'holman')
21
+ kneath = Play::User.create(:office_string => 'kneath')
22
+
23
+ Play::Office.stubs(:user_string).returns("holman,defunkt")
24
+ assert_equal [holman], Play::Office.users
25
+ end
26
+ end
data/test/test_play.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'helper'
2
+
3
+ context "Play" do
4
+ setup do
5
+ end
6
+
7
+ test "path" do
8
+ Play.expects(:config).returns({'path' => '/tmp/play'})
9
+ assert_equal '/tmp/play', Play.path
10
+ end
11
+
12
+ test "now playing" do
13
+ @song = Play::Song.create
14
+ @song.play!
15
+ assert @song, Play.now_playing
16
+ end
17
+ end
data/test/test_song.rb ADDED
@@ -0,0 +1,78 @@
1
+ require 'helper'
2
+
3
+ context "Song" do
4
+ fixtures do
5
+ @song = Play::Song.create
6
+ @user = Play::User.create
7
+ end
8
+
9
+ test "artist_name" do
10
+ @song.artist = Play::Artist.new(:name => "Justice")
11
+ assert_equal "Justice", @song.artist_name
12
+ end
13
+
14
+ test "album_name" do
15
+ @song.album = Play::Album.new(:name => "A Cross the Universe")
16
+ assert_equal "A Cross the Universe", @song.album_name
17
+ end
18
+
19
+ test "enqueue queues it up" do
20
+ @song.enqueue! @user
21
+ assert @song.queued
22
+ end
23
+
24
+ test "enqueue adds a user vote" do
25
+ @song.enqueue! @user
26
+ assert_equal 1, Play::Vote.count
27
+ end
28
+
29
+ test "dequeue" do
30
+ @song.dequeue! @user
31
+ assert !@song.queued
32
+ end
33
+
34
+ test "plays" do
35
+ assert_equal 0, Play::Song.where(:now_playing => true).count
36
+ @song.play!
37
+ assert_equal 1, Play::Song.where(:now_playing => true).count
38
+ end
39
+
40
+ test "play next in queue adds a new history" do
41
+ @song.update_attribute(:queued, true)
42
+ Play::Song.play_next_in_queue
43
+ assert_equal 1, Play::History.count
44
+ end
45
+
46
+ test "play next in queue sets the song as playing" do
47
+ @song.update_attribute(:queued, true)
48
+ Play::Song.play_next_in_queue
49
+ @song.reload
50
+ assert @song.now_playing?
51
+ end
52
+
53
+ test "play next in queue dequeues the song" do
54
+ @song.update_attribute(:queued, true)
55
+ Play::Song.play_next_in_queue
56
+ @song.reload
57
+ assert !@song.queued?
58
+ end
59
+
60
+ test "play next in queue returns the song" do
61
+ @song.update_attribute(:queued, true)
62
+ assert_equal @song, Play::Song.play_next_in_queue
63
+ end
64
+
65
+ test "generates a song for the office" do
66
+ @artist1 = Play::Artist.create
67
+ @song1 = Play::Song.create(:artist => @artist1)
68
+ @artist2 = Play::Artist.create
69
+ @song2 = Play::Song.create(:artist => @artist2)
70
+ @user = Play::User.create
71
+
72
+ users = [@user]
73
+ @user.stubs(:favorite_artists).returns([@artist1])
74
+ Play::Office.expects(:users).returns(users)
75
+ assert_equal @song1, Play::Song.office_song
76
+ end
77
+
78
+ end
data/test/test_user.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'helper'
2
+
3
+ context "User" do
4
+ fixtures do
5
+ @user = Play::User.create(:email => "holman@example.com")
6
+ end
7
+
8
+ test "vote for" do
9
+ @user.vote_for(Play::Song.create)
10
+ assert_equal 1, @user.votes.count
11
+ end
12
+
13
+ test "gravatar_id" do
14
+ assert_equal "54e4ab9ced3fd1f3f5b20ab2f8201b73", @user.gravatar_id
15
+ end
16
+
17
+ test "votes count" do
18
+ @user.vote_for(Play::Song.create)
19
+ assert_equal 1, @user.votes_count
20
+ end
21
+ end
metadata ADDED
@@ -0,0 +1,299 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: play
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Zach Holman
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-05-05 00:00:00 -07:00
19
+ default_executable: play
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: rack
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ~>
28
+ - !ruby/object:Gem::Version
29
+ hash: 27
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 2
34
+ version: 1.2.2
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: sinatra
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ hash: 3
46
+ segments:
47
+ - 0
48
+ version: "0"
49
+ type: :runtime
50
+ version_requirements: *id002
51
+ - !ruby/object:Gem::Dependency
52
+ name: activerecord
53
+ prerelease: false
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
63
+ type: :runtime
64
+ version_requirements: *id003
65
+ - !ruby/object:Gem::Dependency
66
+ name: sqlite3
67
+ prerelease: false
68
+ requirement: &id004 !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ hash: 3
74
+ segments:
75
+ - 0
76
+ version: "0"
77
+ type: :runtime
78
+ version_requirements: *id004
79
+ - !ruby/object:Gem::Dependency
80
+ name: mustache
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ hash: 3
88
+ segments:
89
+ - 0
90
+ version: "0"
91
+ type: :runtime
92
+ version_requirements: *id005
93
+ - !ruby/object:Gem::Dependency
94
+ name: SystemTimer
95
+ prerelease: false
96
+ requirement: &id006 !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ">="
100
+ - !ruby/object:Gem::Version
101
+ hash: 3
102
+ segments:
103
+ - 0
104
+ version: "0"
105
+ type: :runtime
106
+ version_requirements: *id006
107
+ - !ruby/object:Gem::Dependency
108
+ name: ruby-audioinfo
109
+ prerelease: false
110
+ requirement: &id007 !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ hash: 3
116
+ segments:
117
+ - 0
118
+ version: "0"
119
+ type: :runtime
120
+ version_requirements: *id007
121
+ - !ruby/object:Gem::Dependency
122
+ name: oa-oauth
123
+ prerelease: false
124
+ requirement: &id008 !ruby/object:Gem::Requirement
125
+ none: false
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ hash: 3
130
+ segments:
131
+ - 0
132
+ version: "0"
133
+ type: :runtime
134
+ version_requirements: *id008
135
+ - !ruby/object:Gem::Dependency
136
+ name: yajl-ruby
137
+ prerelease: false
138
+ requirement: &id009 !ruby/object:Gem::Requirement
139
+ none: false
140
+ requirements:
141
+ - - ">="
142
+ - !ruby/object:Gem::Version
143
+ hash: 3
144
+ segments:
145
+ - 0
146
+ version: "0"
147
+ type: :runtime
148
+ version_requirements: *id009
149
+ - !ruby/object:Gem::Dependency
150
+ name: mysql2
151
+ prerelease: false
152
+ requirement: &id010 !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ hash: 3
158
+ segments:
159
+ - 0
160
+ version: "0"
161
+ type: :runtime
162
+ version_requirements: *id010
163
+ - !ruby/object:Gem::Dependency
164
+ name: running_man
165
+ prerelease: false
166
+ requirement: &id011 !ruby/object:Gem::Requirement
167
+ none: false
168
+ requirements:
169
+ - - ">="
170
+ - !ruby/object:Gem::Version
171
+ hash: 3
172
+ segments:
173
+ - 0
174
+ version: "0"
175
+ type: :development
176
+ version_requirements: *id011
177
+ - !ruby/object:Gem::Dependency
178
+ name: mocha
179
+ prerelease: false
180
+ requirement: &id012 !ruby/object:Gem::Requirement
181
+ none: false
182
+ requirements:
183
+ - - ">="
184
+ - !ruby/object:Gem::Version
185
+ hash: 3
186
+ segments:
187
+ - 0
188
+ version: "0"
189
+ type: :development
190
+ version_requirements: *id012
191
+ description: |-
192
+ We want to play music at our office. Everyone has their own
193
+ library on their own machines, and everyone except for me plays shitty music.
194
+ Play is designed to make office music more palatable.
195
+ email: github.com@zachholman.com
196
+ executables:
197
+ - play
198
+ extensions: []
199
+
200
+ extra_rdoc_files: []
201
+
202
+ files:
203
+ - Gemfile
204
+ - Gemfile.lock
205
+ - README.md
206
+ - Rakefile
207
+ - bin/play
208
+ - config.ru
209
+ - db/migrate/01_create_schema.rb
210
+ - lib/play.rb
211
+ - lib/play/album.rb
212
+ - lib/play/app.rb
213
+ - lib/play/app/api.rb
214
+ - lib/play/artist.rb
215
+ - lib/play/client.rb
216
+ - lib/play/core_ext/hash.rb
217
+ - lib/play/history.rb
218
+ - lib/play/library.rb
219
+ - lib/play/office.rb
220
+ - lib/play/song.rb
221
+ - lib/play/templates/album_songs.mustache
222
+ - lib/play/templates/artist_songs.mustache
223
+ - lib/play/templates/index.mustache
224
+ - lib/play/templates/layout.mustache
225
+ - lib/play/templates/now_playing.mustache
226
+ - lib/play/templates/play_history.mustache
227
+ - lib/play/templates/profile.mustache
228
+ - lib/play/templates/search.mustache
229
+ - lib/play/templates/show_song.mustache
230
+ - lib/play/templates/song.mustache
231
+ - lib/play/user.rb
232
+ - lib/play/views/album_songs.rb
233
+ - lib/play/views/artist_songs.rb
234
+ - lib/play/views/index.rb
235
+ - lib/play/views/layout.rb
236
+ - lib/play/views/now_playing.rb
237
+ - lib/play/views/play_history.rb
238
+ - lib/play/views/profile.rb
239
+ - lib/play/views/search.rb
240
+ - lib/play/views/show_song.rb
241
+ - lib/play/vote.rb
242
+ - play.gemspec
243
+ - play.yml.example
244
+ - public/css/base.css
245
+ - test/helper.rb
246
+ - test/spec/mini.rb
247
+ - test/test_api.rb
248
+ - test/test_app.rb
249
+ - test/test_artist.rb
250
+ - test/test_client.rb
251
+ - test/test_library.rb
252
+ - test/test_office.rb
253
+ - test/test_play.rb
254
+ - test/test_song.rb
255
+ - test/test_user.rb
256
+ has_rdoc: true
257
+ homepage: https://github.com/holman/play
258
+ licenses: []
259
+
260
+ post_install_message:
261
+ rdoc_options: []
262
+
263
+ require_paths:
264
+ - lib
265
+ required_ruby_version: !ruby/object:Gem::Requirement
266
+ none: false
267
+ requirements:
268
+ - - ">="
269
+ - !ruby/object:Gem::Version
270
+ hash: 3
271
+ segments:
272
+ - 0
273
+ version: "0"
274
+ required_rubygems_version: !ruby/object:Gem::Requirement
275
+ none: false
276
+ requirements:
277
+ - - ">="
278
+ - !ruby/object:Gem::Version
279
+ hash: 3
280
+ segments:
281
+ - 0
282
+ version: "0"
283
+ requirements: []
284
+
285
+ rubyforge_project: play
286
+ rubygems_version: 1.6.2
287
+ signing_key:
288
+ specification_version: 2
289
+ summary: "Your company's dj. \xE2\x96\xBA"
290
+ test_files:
291
+ - test/test_api.rb
292
+ - test/test_app.rb
293
+ - test/test_artist.rb
294
+ - test/test_client.rb
295
+ - test/test_library.rb
296
+ - test/test_office.rb
297
+ - test/test_play.rb
298
+ - test/test_song.rb
299
+ - test/test_user.rb