lita-sonos-commander 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2dc5e325b18f3682e6a3a1dc90e59be191506fb6
4
- data.tar.gz: 343895e09282f80ab5c96ff48892b14ad0a4ad79
3
+ metadata.gz: 2dc8d0e8503926fc073876b3e4e6170a2c5c3dab
4
+ data.tar.gz: 7c791e151b947184c84fc31c4a8f86d101c6c24c
5
5
  SHA512:
6
- metadata.gz: 4bd63de801134e7bf98984b4c7ec2dc1358382ebd0384575cc2fcf9fa43253207294557004f5c76fd8b1ce9c8900ac082b2c470fcefa79db9f5ea07b40002558
7
- data.tar.gz: 47f4c65ffa13e9794547bf02cbf814c9cea2bd8f6c0ada21f5b05dddc240e6bfc1291b41384c8c7d49e55188b5c7486f9fb13afa4fc29f6d10e6dc45b4b83872
6
+ metadata.gz: 314e394be338f2c76821623f2cdd25c6b175b8a72db53be18157898077e145605ff453a512be73a87176bba51135668acd7b0a3ddbe0083627e8fabb8a5e58d1
7
+ data.tar.gz: 21678407ad4fcabecd46f02d9b4ac6f4eb0afbfe6f02d0061fb12c2fb6aeb5a1e4634ed5eb4389bb4bd6d5272116d13b2b369331aaf92b6da45d1dd3428fe864
@@ -1,7 +1,7 @@
1
1
  require 'faye/websocket'
2
2
  require 'eventmachine'
3
3
 
4
- EM.run {
4
+ EM.run do
5
5
  ws = Faye::WebSocket::Client.new('ws://localhost:8080/sonos/listen')
6
6
 
7
7
  ws.on :open do |event|
@@ -9,12 +9,10 @@ EM.run {
9
9
  ws.send('Hello, world!')
10
10
  end
11
11
 
12
- ws.on :message do |event|
13
- p [:message, event.data]
14
- end
12
+ ws.on(:message) { |event| p [:message, event.data] }
15
13
 
16
14
  ws.on :close do |event|
17
15
  p [:close, event.code, event.reason]
18
16
  ws = nil
19
17
  end
20
- }
18
+ end
@@ -0,0 +1,44 @@
1
+ # download the sonos proxy server
2
+ $ git clone https://github.com/dpritchett/sonos-proxy-for-lita-with-node.git
3
+ Cloning into 'sonos-proxy-for-lita-with-node'...
4
+ remote: Counting objects: 114, done.
5
+ remote: Compressing objects: 100% (83/83), done.
6
+ remote: Total 114 (delta 32), reused 111 (delta 30), pack-reused 0
7
+ Receiving objects: 100% (114/114), 55.91 KiB | 773.00 KiB/s, done.
8
+ Resolving deltas: 100% (32/32), done.
9
+
10
+ $ cd sonos-proxy-for-lita-with-node/
11
+
12
+ # install yarn package manager
13
+ $ npm install -g yarn
14
+
15
+ # ask yarn to install all dependencies for this proxy
16
+ $ yarn
17
+ yarn install v1.6.0
18
+ warning package.json: No license field
19
+ warning sonos_proxy_node@1.0.0: No license field
20
+ [1/4] Resolving packages...
21
+ [2/4] Fetching packages...
22
+ [3/4] Linking dependencies...
23
+ [4/4] Building fresh packages...
24
+ Done in 1.47s.
25
+
26
+ # start the server
27
+ $ node ./server.js
28
+ 2018-04-30T12:11:29.284Z INFO Could not find file
29
+ node_moduels/sonos-http-api/settings.json
30
+ 2018-04-30T12:11:29.505Z INFO Presets loaded: { example:
31
+ { players:
32
+ [ { roomName: 'Bathroom', volume: 10 },
33
+ { roomName: 'Kitchen', volume: 10 },
34
+ { roomName: 'Office', volume: 10 },
35
+ { roomName: 'Bedroom', volume: 10 },
36
+ { roomName: 'TV Room', volume: 15 } ],
37
+ playMode: { shuffle: true, repeat: 'all', crossfade: false },
38
+ pauseOthers: false,
39
+ favorite: 'My example favorite' } }
40
+ Looking for Sonos speakers
41
+ 2018-04-30T12:11:29.554Z INFO http server listening on port 5005
42
+ close event received
43
+ Lost contact with server: ws://ad0ede69.ngrok.io/sonos/listen
44
+ I don't know how to reconnect yet. Please help!
@@ -1,4 +1,5 @@
1
1
  class Lita::CommanderMiddleware
2
+ # START:initialize
2
3
  def self.build(open_sockets:)
3
4
  new(open_sockets: open_sockets).build
4
5
  end
@@ -8,7 +9,9 @@ class Lita::CommanderMiddleware
8
9
  def initialize(open_sockets:)
9
10
  @open_sockets = open_sockets
10
11
  end
12
+ # END:initialize
11
13
 
14
+ # START:socket_building
12
15
  def build
13
16
  lambda do |env|
14
17
  if Faye::WebSocket.websocket?(env)
@@ -26,30 +29,34 @@ class Lita::CommanderMiddleware
26
29
  Lita.logger.debug "Sonos client count: #{open_sockets.count}"
27
30
  ws
28
31
  end
32
+ # END:socket_building
29
33
 
30
- def close_socket(ws, event)
31
- open_sockets.delete_if { |s| s == ws }
32
- Lita.logger.debug "Sonos client count: #{open_sockets.count}"
33
- Lita.logger.debug "Socket close: #{[:close, event.code, event.reason]}"
34
- ws = nil
34
+ # START:event_handlers
35
+ def send_welcome_message(ws)
36
+ payload = { message: 'Welcome to Lita Sonos Commander!', command: 'echo' }
37
+ ws.send(payload.to_json)
35
38
  end
36
39
 
37
40
  def handle_message(ws, event)
38
41
  ws.send({ message: "ACK: #{event.data}" }.to_json)
39
42
  end
40
43
 
41
- def send_welcome_message(ws)
42
- payload = { message: 'Welcome to Lita Sonos Commander!', command: 'echo' }
43
- ws.send(payload.to_json)
44
+ def close_socket(ws, event)
45
+ open_sockets.delete_if { |s| s == ws }
46
+ Lita.logger.debug "Sonos client count: #{open_sockets.count}"
47
+ Lita.logger.debug "Socket close: #{[:close, event.code, event.reason]}"
48
+ ws = nil
44
49
  end
50
+ # END:event_handlers
45
51
 
52
+ # START:request_handlers
46
53
  def handle_env_has_socket
47
54
  ws = build_socket(env)
48
55
 
49
56
  send_welcome_message(ws)
50
57
 
51
58
  ws.on(:message) { |event| handle_message(ws, event) }
52
- ws.on(:close) { close_socket(ws, event) }
59
+ ws.on(:close) { |event| close_socket(ws, event) }
53
60
 
54
61
  # Return async Rack response
55
62
  ws.rack_response
@@ -62,4 +69,5 @@ class Lita::CommanderMiddleware
62
69
  ['Hello from a Lita chatbot! Feed me a websocket connection!']
63
70
  ]
64
71
  end
72
+ # END:request_handlers
65
73
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'lita-sonos-commander'
3
- spec.version = '1.1.1'
3
+ spec.version = '1.1.2'
4
4
  spec.authors = ['Daniel J. Pritchett']
5
5
  spec.email = ['dpritchett@gmail.com']
6
6
  spec.description = 'Control your Sonos with Lita chatbot commands'
@@ -14,8 +14,10 @@ Gem::Specification.new do |spec|
14
14
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
15
15
  spec.require_paths = ['lib']
16
16
 
17
+ # START:runtime_dependency
17
18
  spec.add_runtime_dependency 'lita', '>= 4.7'
18
19
  spec.add_runtime_dependency 'faye-websocket', '~> 0.10.7'
20
+ # END:runtime_dependency
19
21
 
20
22
  spec.add_development_dependency 'bundler', '~> 1.3'
21
23
  spec.add_development_dependency 'pry-byebug'
@@ -2,6 +2,7 @@ require 'spec_helper'
2
2
  require 'ostruct'
3
3
  require 'date'
4
4
 
5
+ # START:lambda_basic
5
6
  describe Lita::CommanderMiddleware do
6
7
  let(:handler) { double 'handler' }
7
8
  let(:result) { subject.build({}) }
@@ -14,7 +15,9 @@ describe Lita::CommanderMiddleware do
14
15
  result = subject.build
15
16
  expect(result.is_a?(Proc)).to be_truthy
16
17
  end
18
+ # END:lambda_basic
17
19
 
20
+ # START:add_client
18
21
  context 'adding a new client' do
19
22
  before { Faye::WebSocket.stub(:new).and_return(a_socket) }
20
23
  let(:result) { subject.build_socket(nil) }
@@ -27,6 +30,7 @@ describe Lita::CommanderMiddleware do
27
30
  expect(open_sockets).to include(result)
28
31
  end
29
32
  end
33
+ # END:add_client
30
34
 
31
35
  context 'client disconnects' do
32
36
  let(:event) { double 'socket event' }
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require 'pry'
3
2
  require 'date'
4
3
 
5
4
  describe Lita::Handlers::SonosCommander, lita_handler: true do
@@ -16,15 +15,15 @@ describe Lita::Handlers::SonosCommander, lita_handler: true do
16
15
 
17
16
  it {
18
17
  is_expected.to(route('Lita play url http://zombo.com')
19
- .to(:handle_sonos_play_url))
18
+ .to(:handle_sonos_play_url))
20
19
  }
21
20
  it {
22
21
  is_expected.to(route('Lita play url https://www.youtube.com/watch?v=dQw4w9WgXcQ')
23
- .to(:handle_sonos_play_url))
22
+ .to(:handle_sonos_play_url))
24
23
  }
25
24
  it {
26
25
  is_expected.to(route('Lita speak words i like turtles')
27
- .to(:handle_sonos_say_text))
26
+ .to(:handle_sonos_say_text))
28
27
  }
29
28
 
30
29
  it { is_expected.to route_event(:loaded).to(:register_faye) }
@@ -85,6 +84,7 @@ describe Lita::Handlers::SonosCommander, lita_handler: true do
85
84
  end
86
85
  end
87
86
 
87
+ # START:faye_hookup
88
88
  describe 'socket middleware registration' do
89
89
  let(:middlewares) { double 'middlewares' }
90
90
  before { subject.stub(:middleware_registry).and_return(middlewares) }
@@ -98,17 +98,23 @@ describe Lita::Handlers::SonosCommander, lita_handler: true do
98
98
  subject.register_faye(nil)
99
99
  end
100
100
  end
101
+ # END:faye_hookup
101
102
 
103
+ # START:create_sockets
102
104
  describe ':websocket_creator' do
103
105
  let(:request) { double 'request' }
104
106
  let(:request_env) { double 'request' }
105
107
  let(:middleware) { double 'middleware' }
108
+ let(:middlewares) { double 'middlewares' }
106
109
 
107
- before { subject.stub_chain(:middleware_registry, :each).and_return [middleware] }
110
+ before { subject.stub_chain(:middleware_registry).and_return [middlewares] }
111
+ before { middlewares.stub(:middleware).and_return middleware }
108
112
  before { request.stub(:env).and_return(request_env) }
109
113
 
110
114
  it 'passes incoming any request environments to registered middlewares' do
115
+ expect(middleware).to receive(:call).with(request_env)
111
116
  subject.websocket_creator(request, nil)
112
117
  end
113
118
  end
119
+ # END:create_sockets
114
120
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-sonos-commander
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel J. Pritchett
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-04-30 00:00:00.000000000 Z
11
+ date: 2018-05-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita
@@ -150,7 +150,8 @@ files:
150
150
  - LICENSE
151
151
  - README.md
152
152
  - Rakefile
153
- - example/client.rb
153
+ - example/000-client.rb
154
+ - example/001-install-node-proxy.session
154
155
  - lib/lita-sonos-commander.rb
155
156
  - lib/lita/commander_middleware.rb
156
157
  - lib/lita/handlers/sonos_commander.rb