websockethook 0.1.02 → 0.1.03
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 +4 -4
- data/lib/websockethook.rb +11 -28
- data/spec/spec_helper.rb +0 -1
- data/spec/websockethook_spec.rb +37 -77
- metadata +12 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f12e791fa2429ff43a0fe5834535487685cb8ee7
|
4
|
+
data.tar.gz: 8ab40acc4243e3709e58949a9afe5b3030c7bd58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9bdffa58da91db7c2c0857879466dda153b736518b19e0c6ef76f6e04f50ecf299c3a877a5451382a572a23235ddfb4b082b56e53b37c584c95f2546a686d33f
|
7
|
+
data.tar.gz: c0387e1e207b2b01b6cdac83398c41e3c9db94f37b2924a6e83f9a0ab878e559ee316c7dd186fba9946cd01c16686ebac86338df2089df2acc5ae4347d7d23ad
|
data/lib/websockethook.rb
CHANGED
@@ -3,33 +3,24 @@ require 'json'
|
|
3
3
|
require 'eventmachine'
|
4
4
|
|
5
5
|
class WebSocketHook
|
6
|
-
DEFAULT_HOST
|
6
|
+
DEFAULT_HOST = 'ws://websockethook.io'
|
7
|
+
DEFAULT_SLEEP = 0.1
|
8
|
+
DEFAULT_KEEP_ALIVE = true
|
9
|
+
DEFAULT_PING = 20
|
7
10
|
|
8
11
|
def initialize(options = {})
|
9
12
|
@stopping = false
|
10
|
-
@hooks = []
|
11
13
|
initialize_host options
|
12
14
|
initialize_pause options
|
13
15
|
initialize_keep_alive options
|
14
16
|
initialize_ping options
|
15
|
-
initialize_hooks options
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
fail "Hook id '#{id}' must be a String" unless id.is_a?(String)
|
20
|
-
fail "Hook id must only be alphanumeric, '_', '.', or '_'" unless /^[a-zA-Z0-9\-_\.]*$/ === id
|
21
|
-
@hooks << id unless @hooks.include?(id)
|
22
|
-
end
|
23
|
-
|
24
|
-
def unregister(id)
|
25
|
-
@hooks.delete(id)
|
26
|
-
end
|
27
|
-
|
28
|
-
def listen(&block)
|
19
|
+
def listen(id=nil, &block)
|
29
20
|
fail 'Block must be provided' unless block && block.is_a?(Proc)
|
30
21
|
begin
|
31
22
|
@stopping = false
|
32
|
-
listener(&block)
|
23
|
+
listener(id, &block)
|
33
24
|
restart = @keep_alive && !@stopping
|
34
25
|
if restart
|
35
26
|
block.call type: 'restart', message: 'restarting connection since it was lost'
|
@@ -51,38 +42,30 @@ class WebSocketHook
|
|
51
42
|
end
|
52
43
|
|
53
44
|
def initialize_pause(options = {})
|
54
|
-
@pause = options[:sleep] ||
|
45
|
+
@pause = options[:sleep] || DEFAULT_SLEEP
|
55
46
|
fail 'Pause (:pause) must be a float or integer' unless @pause.is_a?(Float) || @pause.is_a?(Integer)
|
56
47
|
end
|
57
48
|
|
58
49
|
def initialize_keep_alive(options = {})
|
59
|
-
@keep_alive = options[:keep_alive] ||
|
50
|
+
@keep_alive = options[:keep_alive] || DEFAULT_KEEP_ALIVE
|
60
51
|
fail 'Keep Alive (:keep_alive) must be a boolean (true/false)' unless @keep_alive == true || @keep_alive == false
|
61
52
|
end
|
62
53
|
|
63
54
|
def initialize_ping(options = {})
|
64
|
-
@ping = options[:ping] ||
|
55
|
+
@ping = options[:ping] || DEFAULT_PING
|
65
56
|
fail 'Ping (:ping) must be an integer' unless @ping.is_a?(Integer)
|
66
57
|
end
|
67
58
|
|
68
|
-
def initialize_hooks(options = {})
|
69
|
-
hooks = options[:hooks] || []
|
70
|
-
fail 'Hooks (:hooks) must be an array' unless hooks.is_a?(Array)
|
71
|
-
hooks.each { |hook| register(hook) }
|
72
|
-
end
|
73
|
-
|
74
59
|
def stop_em
|
75
60
|
EM.stop
|
76
61
|
rescue
|
77
62
|
end
|
78
63
|
|
79
|
-
def listener(&block)
|
64
|
+
def listener(id, &block)
|
80
65
|
websocket(block) do |ws|
|
81
66
|
ws.on :open do
|
82
67
|
block.call type: 'open'
|
83
|
-
|
84
|
-
ws.send({type:'register',id:hook}.to_json)
|
85
|
-
end
|
68
|
+
ws.send({type:'register',id:id}.to_json)
|
86
69
|
end
|
87
70
|
ws.on :message do |message|
|
88
71
|
data = nil
|
data/spec/spec_helper.rb
CHANGED
data/spec/websockethook_spec.rb
CHANGED
@@ -4,97 +4,57 @@ require 'securerandom'
|
|
4
4
|
require 'rest-client'
|
5
5
|
|
6
6
|
describe WebSocketHook do
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
expect do
|
11
|
-
ws = WebSocketHook.new
|
12
|
-
end.to_not raise_error
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'can register a hook' do
|
16
|
-
ws = WebSocketHook.new
|
17
|
-
data = []
|
18
|
-
t = Thread.new { ws.listen { |msg| data << msg } }
|
19
|
-
|
20
|
-
eventually do
|
21
|
-
data.any? do |line|
|
22
|
-
line[:type] == 'registered'
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
ws.stop
|
27
|
-
t.kill
|
7
|
+
before :each do
|
8
|
+
@ws = WebSocketHook.new
|
9
|
+
@logger = double('@logger', log: true)
|
28
10
|
end
|
29
11
|
|
30
12
|
it 'can open and close' do
|
31
|
-
|
32
|
-
|
33
|
-
|
13
|
+
expect(@logger).to receive(:log).with({type: 'open'})
|
14
|
+
expect(@logger).to receive(:log).with({type: 'close'})
|
15
|
+
expect(@logger).to receive(:log).with({type: 'stopped'})
|
34
16
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
17
|
+
@ws.listen 'test' do |msg|
|
18
|
+
@logger.log(msg)
|
19
|
+
@ws.stop
|
39
20
|
end
|
40
21
|
|
41
|
-
ws.stop
|
42
|
-
|
43
|
-
eventually do
|
44
|
-
data.any? do |line|
|
45
|
-
line[:type] == 'close'
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
t.kill
|
50
22
|
end
|
51
23
|
|
52
|
-
it 'can
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
24
|
+
it 'can trigger a hook with data' do
|
25
|
+
expect(@logger).to receive(:log).with({type: 'open'})
|
26
|
+
expect(@logger).to receive(:log).with({type: 'registered', data: anything()})
|
27
|
+
expect(@logger).to receive(:log).with({type: 'hook', id: anything(), data: {this_is_a:'test'}})
|
28
|
+
expect(@logger).to receive(:log).with({type: 'close'})
|
29
|
+
expect(@logger).to receive(:log).with({type: 'stopped'})
|
30
|
+
|
31
|
+
@ws.listen do |msg|
|
32
|
+
@logger.log(msg)
|
33
|
+
|
34
|
+
if msg[:type] == 'registered'
|
35
|
+
hook_url = msg[:data][:url]
|
36
|
+
RestClient.post(hook_url,this_is_a:'test')
|
62
37
|
end
|
63
|
-
end
|
64
38
|
|
65
|
-
|
66
|
-
|
39
|
+
@ws.stop if msg[:type] == 'hook'
|
40
|
+
end
|
67
41
|
end
|
68
42
|
|
69
|
-
it 'can
|
43
|
+
it 'can register a custom id' do
|
70
44
|
id = "test_#{SecureRandom.hex(4)}"
|
71
|
-
ws = WebSocketHook.new
|
72
|
-
ws.register id
|
73
|
-
data = []
|
74
|
-
t = Thread.new { ws.listen { |msg| data << msg } }
|
75
|
-
hook_url = ''
|
76
|
-
|
77
|
-
check_eventually data do |line|
|
78
|
-
found = line[:type] == 'registered' && line[:data][:id] == id
|
79
|
-
hook_url = line[:data][:url] if found
|
80
|
-
found
|
81
|
-
end
|
82
45
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
ws.
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
eventually do
|
95
|
-
data.any? do |line|
|
96
|
-
block.yield(line)
|
46
|
+
expect(@logger).to receive(:log).with({type: 'open'})
|
47
|
+
expect(@logger).to receive(:log).with({type: 'registered', data: anything()})
|
48
|
+
expect(@logger).to receive(:log).with({type: 'registered', data: {id:id, path:"/hook/#{id}",url:"http://websockethook.io/hook/#{id}"}})
|
49
|
+
expect(@logger).to receive(:log).with({type: 'close'})
|
50
|
+
expect(@logger).to receive(:log).with({type: 'stopped'})
|
51
|
+
|
52
|
+
@ws.listen id do |msg|
|
53
|
+
@logger.log(msg)
|
54
|
+
|
55
|
+
if msg[:type] == 'registered' && msg[:data][:id] == id
|
56
|
+
@ws.stop
|
97
57
|
end
|
98
|
-
end
|
58
|
+
end
|
99
59
|
end
|
100
60
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: websockethook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.03
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maciej Skierkowski
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faye-websocket
|
@@ -16,70 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.
|
19
|
+
version: 0.10.3
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.
|
26
|
+
version: 0.10.3
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rspec
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 3.
|
33
|
+
version: 3.4.0
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 3.
|
40
|
+
version: 3.4.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: codeclimate-test-reporter
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 0.
|
47
|
+
version: 0.5.0
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version: 0.
|
54
|
+
version: 0.5.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: rake
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 11.1.2
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: wrong
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: 0.7.1
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: 0.7.1
|
68
|
+
version: 11.1.2
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: rest-client
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -124,10 +110,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
124
110
|
version: '0'
|
125
111
|
requirements: []
|
126
112
|
rubyforge_project:
|
127
|
-
rubygems_version: 2.
|
113
|
+
rubygems_version: 2.5.1
|
128
114
|
signing_key:
|
129
115
|
specification_version: 4
|
130
116
|
summary: A library for use the free web.sockethook.io service
|
131
117
|
test_files:
|
132
118
|
- "./spec/spec_helper.rb"
|
133
119
|
- "./spec/websockethook_spec.rb"
|
120
|
+
has_rdoc:
|