walkman 0.1.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.
@@ -0,0 +1,13 @@
1
+ require "spec_helper"
2
+
3
+ describe Walkman::Services::Base do
4
+ let(:interface) { Walkman::Services::Base.new }
5
+
6
+ it "raises an error for all methods required by subclass" do
7
+ expect { interface.startup }.to raise_error
8
+ expect { interface.shutdown }.to raise_error
9
+ expect { interface.restart }.to raise_error
10
+ expect { interface.play("foo") }.to raise_error
11
+ expect { interface.stop }.to raise_error
12
+ end
13
+ end
@@ -0,0 +1,24 @@
1
+ require "spec_helper"
2
+ require "sinatra_helper"
3
+ require "walkman/services/rdio/rdio_player"
4
+
5
+ describe RdioPlayer do
6
+ it "responds to /rdio/:source_id" do
7
+ get "/rdio/t1234567"
8
+
9
+ expect(last_response).to be_ok
10
+ expect(last_response.body).to match(/track/)
11
+ expect(last_response.body).to match(/artist/)
12
+ expect(last_response.body).to match(/album/)
13
+ end
14
+
15
+ it "responds to /rdio/:source_id/done" do
16
+ Walkman::Player.any_instance.stub(:current_song=)
17
+ expect_any_instance_of(Walkman::Player).to receive(:current_song=)
18
+
19
+ get "/rdio/t1234567/done"
20
+
21
+ expect(last_response).to be_ok
22
+ expect(last_response.body).to match(/Done/)
23
+ end
24
+ end
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+
3
+ describe Walkman::Services::Rdio do
4
+ let(:rdio) { Walkman::Services::Rdio.new }
5
+
6
+ before do
7
+ Process.stub(:kill) { 1 }
8
+ rdio.stub(:rand).with(anything) { 1234 }
9
+
10
+ # During tests, Process.fork seems to use an implicit return rather than
11
+ # returning a pid. Since Command.run is the last statement in our Process.fork
12
+ # block, we need to make sure it returns an int.
13
+ Command.stub(:run) { 1 }
14
+ end
15
+
16
+ describe "#startup" do
17
+ it "starts RdioPlayer" do
18
+ expect(Thread).to receive(:new) do |&block|
19
+ expect(RdioPlayer).to receive(:run!)
20
+ block.call
21
+ end
22
+
23
+ rdio.startup
24
+ end
25
+ end
26
+
27
+ describe "#shutdown" do
28
+ it "terminates RdioPlayer thread" do
29
+ my_thread = "foo"
30
+ my_thread.stub(:terminate)
31
+ rdio.instance_variable_set("@player_thread", my_thread)
32
+
33
+ expect(my_thread).to receive(:terminate)
34
+
35
+ rdio.shutdown
36
+ end
37
+ end
38
+
39
+ describe "#restart" do
40
+ it "stop and starts RdioPlayer" do
41
+ expect(rdio).to receive(:shutdown)
42
+ expect(rdio).to receive(:startup)
43
+
44
+ rdio.restart
45
+ end
46
+ end
47
+
48
+ describe "#play" do
49
+ it "launches a new player browser with the given song" do
50
+ rdio.instance_variable_set("@browser_pid", 123)
51
+
52
+ expect(Process).to receive(:fork) do |&block|
53
+ expect(Command).to receive(:run).with("/Applications/Google\\ Chrome.app/Contents/MacOS/Google\\ Chrome --no-process-singleton-dialog \"http://localhost:4567/rdio/t1234567\" --user-data-data-dir=/tmp/walkman/chrome/1234")
54
+ block.call
55
+ end
56
+
57
+ rdio.play("t1234567")
58
+ end
59
+ end
60
+
61
+ describe "#stop" do
62
+ it "stops any currently playing song" do
63
+ expect(Command).to receive(:run).with("kill $(ps ax | grep \"http://localhost:4567/rdio/\" | grep -v grep | sed -e 's/^[ \t]*//' | cut -d ' ' -f 1)").at_least(2).times
64
+ expect(Process).to receive(:kill)
65
+
66
+ rdio.play("t1234567")
67
+ rdio.stop
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,33 @@
1
+ require "spec_helper"
2
+
3
+ describe Walkman::Song do
4
+ let(:song) { Walkman::Song.new }
5
+
6
+ it "responds to #source_type" do
7
+ expect(song).to respond_to(:source_type)
8
+ end
9
+
10
+ it "responds to #source_id" do
11
+ expect(song).to respond_to(:source_id)
12
+ end
13
+
14
+ it "responds to #artist" do
15
+ expect(song).to respond_to(:artist)
16
+ end
17
+
18
+ it "responds to #title" do
19
+ expect(song).to respond_to(:title)
20
+ end
21
+
22
+ it "responds to #album" do
23
+ expect(song).to respond_to(:album)
24
+ end
25
+
26
+ it "responds to echonest_song_id" do
27
+ expect(song).to respond_to(:echonest_song_id)
28
+ end
29
+
30
+ it "responds to echonest_artist_id" do
31
+ expect(song).to respond_to(:echonest_artist_id)
32
+ end
33
+ end
data/walkman.gemspec ADDED
@@ -0,0 +1,29 @@
1
+ # encoding: utf-8
2
+
3
+ Gem::Specification.new do |spec|
4
+ spec.name = "walkman"
5
+ spec.version = "0.1.1"
6
+
7
+ spec.author = "Tres Trantham"
8
+ spec.email = "tres@trestrantham.com"
9
+ spec.description = "Control your music"
10
+ spec.summary = "Control your music"
11
+ spec.homepage = "https://github.com/trestrantham/walkman"
12
+ spec.license = "MIT"
13
+
14
+ spec.files = `git ls-files`.split($/)
15
+ spec.test_files = spec.files.grep(/^spec/)
16
+ spec.require_paths = ["lib"]
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+
19
+ spec.add_development_dependency "bundler", "~> 1.3"
20
+ spec.add_development_dependency "rake", "~> 10.1"
21
+
22
+ spec.add_dependency "activemodel", "~> 4.0.2"
23
+ spec.add_dependency "colorize", "~> 0.6.0"
24
+ spec.add_dependency "command", "~> 1.0"
25
+ spec.add_dependency "echowrap", "~> 0.1.0"
26
+ spec.add_dependency "sinatra", "~> 1.4.4"
27
+ spec.add_dependency "thor", "~> 0.18.1"
28
+ spec.add_dependency "titleize", "~> 1.3.0"
29
+ end
metadata ADDED
@@ -0,0 +1,222 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: walkman
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Tres Trantham
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-12-22 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.1'
41
+ - !ruby/object:Gem::Dependency
42
+ name: activemodel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 4.0.2
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 4.0.2
55
+ - !ruby/object:Gem::Dependency
56
+ name: colorize
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ~>
60
+ - !ruby/object:Gem::Version
61
+ version: 0.6.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ~>
67
+ - !ruby/object:Gem::Version
68
+ version: 0.6.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: command
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ~>
74
+ - !ruby/object:Gem::Version
75
+ version: '1.0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ~>
81
+ - !ruby/object:Gem::Version
82
+ version: '1.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: echowrap
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 0.1.0
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 0.1.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: sinatra
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ~>
102
+ - !ruby/object:Gem::Version
103
+ version: 1.4.4
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ~>
109
+ - !ruby/object:Gem::Version
110
+ version: 1.4.4
111
+ - !ruby/object:Gem::Dependency
112
+ name: thor
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ~>
116
+ - !ruby/object:Gem::Version
117
+ version: 0.18.1
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ~>
123
+ - !ruby/object:Gem::Version
124
+ version: 0.18.1
125
+ - !ruby/object:Gem::Dependency
126
+ name: titleize
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ~>
130
+ - !ruby/object:Gem::Version
131
+ version: 1.3.0
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ~>
137
+ - !ruby/object:Gem::Version
138
+ version: 1.3.0
139
+ description: Control your music
140
+ email: tres@trestrantham.com
141
+ executables: []
142
+ extensions: []
143
+ extra_rdoc_files: []
144
+ files:
145
+ - .gitignore
146
+ - .travis.yml
147
+ - Gemfile
148
+ - LICENSE.txt
149
+ - README.md
150
+ - Rakefile
151
+ - lib/walkman.rb
152
+ - lib/walkman/cli.rb
153
+ - lib/walkman/commands/controls.rb
154
+ - lib/walkman/commands/information.rb
155
+ - lib/walkman/commands/player.rb
156
+ - lib/walkman/commands/playlist.rb
157
+ - lib/walkman/commands/queueing.rb
158
+ - lib/walkman/config.rb
159
+ - lib/walkman/player.rb
160
+ - lib/walkman/playlist.rb
161
+ - lib/walkman/services/base.rb
162
+ - lib/walkman/services/rdio.rb
163
+ - lib/walkman/services/rdio/rdio_player.rb
164
+ - lib/walkman/song.rb
165
+ - spec/factories/echowrap.rb
166
+ - spec/factories/playlist.rb
167
+ - spec/factories/song.rb
168
+ - spec/sinatra_helper.rb
169
+ - spec/spec_helper.rb
170
+ - spec/support/factory_girl.rb
171
+ - spec/walkman/commands/controls_spec.rb
172
+ - spec/walkman/commands/information_spec.rb
173
+ - spec/walkman/commands/player_spec.rb
174
+ - spec/walkman/commands/queueing_spec.rb
175
+ - spec/walkman/player_spec.rb
176
+ - spec/walkman/playlist_spec.rb
177
+ - spec/walkman/services/base_spec.rb
178
+ - spec/walkman/services/rdio/rdio_player_spec.rb
179
+ - spec/walkman/services/rdio_spec.rb
180
+ - spec/walkman/song_spec.rb
181
+ - walkman.gemspec
182
+ homepage: https://github.com/trestrantham/walkman
183
+ licenses:
184
+ - MIT
185
+ metadata: {}
186
+ post_install_message:
187
+ rdoc_options: []
188
+ require_paths:
189
+ - lib
190
+ required_ruby_version: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - '>='
193
+ - !ruby/object:Gem::Version
194
+ version: '0'
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ requirements:
197
+ - - '>='
198
+ - !ruby/object:Gem::Version
199
+ version: '0'
200
+ requirements: []
201
+ rubyforge_project:
202
+ rubygems_version: 2.1.11
203
+ signing_key:
204
+ specification_version: 4
205
+ summary: Control your music
206
+ test_files:
207
+ - spec/factories/echowrap.rb
208
+ - spec/factories/playlist.rb
209
+ - spec/factories/song.rb
210
+ - spec/sinatra_helper.rb
211
+ - spec/spec_helper.rb
212
+ - spec/support/factory_girl.rb
213
+ - spec/walkman/commands/controls_spec.rb
214
+ - spec/walkman/commands/information_spec.rb
215
+ - spec/walkman/commands/player_spec.rb
216
+ - spec/walkman/commands/queueing_spec.rb
217
+ - spec/walkman/player_spec.rb
218
+ - spec/walkman/playlist_spec.rb
219
+ - spec/walkman/services/base_spec.rb
220
+ - spec/walkman/services/rdio/rdio_player_spec.rb
221
+ - spec/walkman/services/rdio_spec.rb
222
+ - spec/walkman/song_spec.rb