lita-sonos-commander 1.1.1 → 1.1.2

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.
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