power_strip 0.1.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cfbdf19d7bf07bffbe82762068326c83275bbbd2
4
- data.tar.gz: 4822d861290a272543619889ed2cbfaa39537a95
3
+ metadata.gz: e054734a1231d00dddaa0cd7d04bdde84c30aef0
4
+ data.tar.gz: 9486f5a74e5c6e9d67f6706778806e6c3bd281c9
5
5
  SHA512:
6
- metadata.gz: 593302575354edec1f8b8d10e63779df75b59d9757bf0d18fb23aec48786b10d2031a264ee339d9a8081ffd007cdf75212db926994c9d976f6af0df41f02ff0a
7
- data.tar.gz: 5a418383fce11f99fc3113fd8620d7a2a7b385278abe67c9743f39f8994811d02854d79567bb1dd3ec3dad02ddfd0c011e52f6dd83514818a7edfe1feaef0931
6
+ metadata.gz: c66f99e4a4e2b306a059d5239aefeed77d2d8a37ad9c50fefe94b5edc1eddabc89b6198aa90ef3082f9e60bcd7cbf3b1c33fcf5b4714a3a7cc47d8c532693c5e
7
+ data.tar.gz: 3d36b2009b5aded3fb3980328c6eda1adc5da569675e0577729f82fe7b281782d80938743a3aa740e89e6ecbc3d913530a12bf22a24a30bdce0df3a8a2fee829
@@ -1,3 +1,3 @@
1
1
  module PowerStrip
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,92 @@
1
+ require 'bowser/websocket'
2
+ require 'promise'
3
+
4
+ module PowerStrip
5
+ class Client
6
+ attr_reader :url
7
+
8
+ def initialize(url)
9
+ @url = url
10
+ @socket = Bowser.websocket(url)
11
+ @socket.autoreconnect!
12
+ @subscriptions = []
13
+
14
+ @socket.on(:open) { @subscriptions.each(&:subscribe) }
15
+ end
16
+
17
+ def subscribe channel_name
18
+ channel = Channel.new(channel_name, @socket)
19
+ @subscriptions << channel
20
+
21
+ if @socket.connected?
22
+ channel.subscribe
23
+ end
24
+
25
+ channel
26
+ end
27
+
28
+ def on event_name, &block
29
+ @events ||= {
30
+ disconnect: :close,
31
+ connect: :open,
32
+ }
33
+
34
+ native_event = @events.fetch event_name do
35
+ raise ArgumentError,
36
+ "event #{event_name} is not a valid event for #{inspect}"
37
+ end
38
+
39
+ @socket.on native_event, &block
40
+ end
41
+ end
42
+
43
+ Channel = Struct.new(:name, :socket) do
44
+ def on event_name, &block
45
+ socket.on :message do |event|
46
+ message = Message.new(event.data)
47
+
48
+ if message.channel == name && message.event == event_name
49
+ block.call message
50
+ end
51
+ end
52
+ end
53
+
54
+ def subscribe
55
+ socket.send_message(
56
+ event: :@subscribe,
57
+ channel: name,
58
+ )
59
+ end
60
+
61
+ def method_missing event, message
62
+ promise = Promise.new
63
+
64
+ if socket.connected?
65
+ socket.send_message({
66
+ channel: name,
67
+ event: event,
68
+ data: message,
69
+ }.select { |k,v| v })
70
+ promise.resolve true
71
+ else
72
+ Bowser.window.delay 1 do
73
+ send(event, message).then { promise.resolve true }
74
+ end
75
+ end
76
+
77
+ promise
78
+ rescue => exception
79
+ promise.fail exception
80
+ end
81
+ end
82
+
83
+ class Message
84
+ attr_reader :channel, :event, :data
85
+
86
+ def initialize(channel: nil, event: nil, data: nil)
87
+ @channel = channel
88
+ @event = event
89
+ @data = data
90
+ end
91
+ end
92
+ end
@@ -18,7 +18,6 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_runtime_dependency "faye-websocket", "~> 0.10.4"
21
- spec.add_runtime_dependency "grand_central"
22
21
 
23
22
  spec.add_development_dependency "bundler", "~> 1.12"
24
23
  spec.add_development_dependency "rake", "~> 10.0"
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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Gaskins
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-11-08 00:00:00.000000000 Z
11
+ date: 2016-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.10.4
27
- - !ruby/object:Gem::Dependency
28
- name: grand_central
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -102,6 +88,7 @@ files:
102
88
  - lib/power_strip/channel_list.rb
103
89
  - lib/power_strip/message.rb
104
90
  - lib/power_strip/version.rb
91
+ - opal/power_strip.rb
105
92
  - power_strip.gemspec
106
93
  homepage: https://github.com/clearwater-rb/power_strip
107
94
  licenses: []