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