power_strip 0.1.0 → 0.1.1

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: 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: []