power_strip 0.2.0 → 0.3.0
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 +5 -5
- data/lib/power_strip/app.rb +32 -11
- data/lib/power_strip/channel.rb +4 -0
- data/lib/power_strip/channel_list.rb +21 -0
- data/lib/power_strip/connection.rb +9 -0
- data/lib/power_strip/version.rb +1 -1
- data/lib/power_strip.rb +12 -1
- data/opal/power_strip.rb +11 -6
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 653cf22671aa77f68902a8e7d90d08fd4e0c783f2c748f39f0af8f79ebfd225c
|
4
|
+
data.tar.gz: 3937236883fe65bc62e6cc75f46944b82d0a0a05fbb68f9f4bfd555a03162dd5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c0c35f302b3f82ad8a8008badf015e4a8b421082c7ffd37b52d91c75ff77e2460c8a680ae77047551129880e1dd56e01439fe78dc15c6c0071eb8b706d09449
|
7
|
+
data.tar.gz: fe43d7691d6885a32064036383cd8e63d6edcfaec5c959df65a09f196354678f0e61b69667b5d9d1d1b6b679cf81a2ea2bc42ba4a6d07f666be673363ccb9d95
|
data/lib/power_strip/app.rb
CHANGED
@@ -45,24 +45,25 @@ module PowerStrip
|
|
45
45
|
subscriptions << channel
|
46
46
|
|
47
47
|
socket.send({
|
48
|
-
event: :subscribed,
|
49
48
|
channel: channel_name,
|
49
|
+
event: :subscribed,
|
50
50
|
}.to_json)
|
51
51
|
when '@unsubscribe'
|
52
52
|
subscriptions.delete channel
|
53
53
|
channel.delete socket
|
54
54
|
|
55
55
|
socket.send({
|
56
|
-
event: :unsubscribed,
|
57
56
|
channel: channel_name,
|
57
|
+
event: :unsubscribed,
|
58
58
|
}.to_json)
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
59
|
+
end
|
60
|
+
|
61
|
+
@handlers[channel_name][message.event].each do |callback|
|
62
|
+
begin
|
63
|
+
callback[message.data, @connections[socket]]
|
64
|
+
rescue => e
|
65
|
+
warn "[PowerStrip] #{e.inspect}"
|
66
|
+
warn e.backtrace
|
66
67
|
end
|
67
68
|
end
|
68
69
|
rescue JSON::ParserError
|
@@ -71,13 +72,29 @@ module PowerStrip
|
|
71
72
|
end
|
72
73
|
|
73
74
|
socket.on :open do
|
74
|
-
|
75
|
+
connection = Connection.new(socket)
|
76
|
+
@connections[socket] = connection
|
77
|
+
@handlers['meta'.freeze]['open'].each do |callback|
|
78
|
+
begin
|
79
|
+
callback[connection]
|
80
|
+
rescue => e
|
81
|
+
warn "[PowerStrip] #{e.inspect}"
|
82
|
+
end
|
83
|
+
end
|
75
84
|
end
|
76
85
|
|
77
86
|
socket.on :close do
|
78
87
|
# Remove this connection from all channels it was subscribed to.
|
79
88
|
subscriptions.each { |channel| channel.delete socket }
|
80
|
-
@connections.delete socket
|
89
|
+
connection = @connections.delete socket
|
90
|
+
channels.prune
|
91
|
+
@handlers['meta'.freeze]['close'].each do |callback|
|
92
|
+
begin
|
93
|
+
callback[connection]
|
94
|
+
rescue => e
|
95
|
+
warn "[PowerStrip] #{e.inspect}"
|
96
|
+
end
|
97
|
+
end
|
81
98
|
end
|
82
99
|
|
83
100
|
socket.rack_response
|
@@ -90,6 +107,10 @@ module PowerStrip
|
|
90
107
|
@handlers[channel.to_s][event.to_s] << block
|
91
108
|
end
|
92
109
|
|
110
|
+
def close channel_name
|
111
|
+
@handlers.delete channel_name.to_s
|
112
|
+
end
|
113
|
+
|
93
114
|
def listen
|
94
115
|
redis.dup.subscribe(:power_strip) do |on|
|
95
116
|
on.message do |_, message|
|
data/lib/power_strip/channel.rb
CHANGED
@@ -2,6 +2,8 @@ require 'power_strip/channel'
|
|
2
2
|
|
3
3
|
module PowerStrip
|
4
4
|
class ChannelList
|
5
|
+
include Enumerable
|
6
|
+
|
5
7
|
def initialize(redis:)
|
6
8
|
@redis = redis
|
7
9
|
@channels = Hash.new do |hash, channel|
|
@@ -17,6 +19,10 @@ module PowerStrip
|
|
17
19
|
@channels[name.to_s]
|
18
20
|
end
|
19
21
|
|
22
|
+
def each
|
23
|
+
@channels.each_value { |channel| yield channel }
|
24
|
+
end
|
25
|
+
|
20
26
|
def to_a
|
21
27
|
@channels.values
|
22
28
|
end
|
@@ -28,5 +34,20 @@ module PowerStrip
|
|
28
34
|
def has_channel? channel_name
|
29
35
|
@channels.key? channel_name.to_s
|
30
36
|
end
|
37
|
+
|
38
|
+
def inspect
|
39
|
+
longest_name = @channels.each_key.max_by(&:length).length
|
40
|
+
|
41
|
+
<<-EOF
|
42
|
+
#<#{self.class.name}:0x#{(object_id * 2).to_s(16)}
|
43
|
+
#{@channels.map { |name, channel| " #{name.rjust(longest_name)}: #{channel.sockets.length}" }.join("\n") }>
|
44
|
+
EOF
|
45
|
+
end
|
46
|
+
|
47
|
+
def prune
|
48
|
+
@channels.reject! do |name, channel|
|
49
|
+
channel.empty?
|
50
|
+
end
|
51
|
+
end
|
31
52
|
end
|
32
53
|
end
|
@@ -15,6 +15,15 @@ module PowerStrip
|
|
15
15
|
@metadata[attribute] = value
|
16
16
|
end
|
17
17
|
|
18
|
+
def send message
|
19
|
+
case message
|
20
|
+
when Message, Hash
|
21
|
+
@socket.send message.to_json
|
22
|
+
when String
|
23
|
+
@socket.send message
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
18
27
|
def method_missing *args, &block
|
19
28
|
@socket.public_send *args, &block
|
20
29
|
end
|
data/lib/power_strip/version.rb
CHANGED
data/lib/power_strip.rb
CHANGED
@@ -20,7 +20,14 @@ module PowerStrip
|
|
20
20
|
|
21
21
|
def start(**args)
|
22
22
|
@app = App.instance(**args)
|
23
|
-
@thread = Thread.new
|
23
|
+
@thread = Thread.new do
|
24
|
+
begin
|
25
|
+
app.listen
|
26
|
+
rescue => e
|
27
|
+
warn "[PowerStrip Handler Thread] #{e}"
|
28
|
+
warn e.backtrace
|
29
|
+
end
|
30
|
+
end
|
24
31
|
end
|
25
32
|
|
26
33
|
def [] channel
|
@@ -31,6 +38,10 @@ module PowerStrip
|
|
31
38
|
app.on event_name, channel: channel, &block
|
32
39
|
end
|
33
40
|
|
41
|
+
def close channel_name
|
42
|
+
app.close channel_name
|
43
|
+
end
|
44
|
+
|
34
45
|
class Channel
|
35
46
|
def on message, &block
|
36
47
|
PowerStrip.on(message, channel: name, &block)
|
data/opal/power_strip.rb
CHANGED
@@ -5,14 +5,20 @@ module PowerStrip
|
|
5
5
|
class Client
|
6
6
|
attr_reader :url
|
7
7
|
|
8
|
-
def initialize(url)
|
8
|
+
def initialize(url, auto_resubscribe: true)
|
9
9
|
@url = url
|
10
10
|
@socket = Bowser.websocket(url)
|
11
11
|
@socket.autoreconnect!
|
12
12
|
@subscriptions = {}
|
13
13
|
|
14
14
|
@socket.on :open do
|
15
|
-
|
15
|
+
if auto_resubscribe
|
16
|
+
@subscriptions.each do |name, channel|
|
17
|
+
channel.subscribe
|
18
|
+
end
|
19
|
+
else
|
20
|
+
@subscriptions = {}
|
21
|
+
end
|
16
22
|
end
|
17
23
|
@socket.on :message do |event|
|
18
24
|
message = Message.new(event.data)
|
@@ -34,11 +40,10 @@ module PowerStrip
|
|
34
40
|
end
|
35
41
|
|
36
42
|
def unsubscribe channel_name
|
37
|
-
channel = @subscriptions
|
43
|
+
channel = @subscriptions.delete(channel_name)
|
38
44
|
return if channel.nil?
|
39
45
|
|
40
|
-
@
|
41
|
-
channel.unsubscribe
|
46
|
+
channel.unsubscribe if @socket.connected?
|
42
47
|
|
43
48
|
channel
|
44
49
|
end
|
@@ -96,7 +101,7 @@ module PowerStrip
|
|
96
101
|
|
97
102
|
def receive_message message
|
98
103
|
@handlers[message.event].each do |handler|
|
99
|
-
handler.call message
|
104
|
+
handler.call message.data
|
100
105
|
end
|
101
106
|
end
|
102
107
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: power_strip
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|
@@ -152,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
152
152
|
version: '0'
|
153
153
|
requirements: []
|
154
154
|
rubyforge_project:
|
155
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.7.3
|
156
156
|
signing_key:
|
157
157
|
specification_version: 4
|
158
158
|
summary: Push data from server to client with Ruby
|