websockethook 0.1.02 → 0.1.03

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: 3de140b85addf488c702602161163a39fdc57c4c
4
- data.tar.gz: 4760c900e26e41906797fa2507055ccd1a071513
3
+ metadata.gz: f12e791fa2429ff43a0fe5834535487685cb8ee7
4
+ data.tar.gz: 8ab40acc4243e3709e58949a9afe5b3030c7bd58
5
5
  SHA512:
6
- metadata.gz: d4fd1b06e74a31316717c5602423e696a58d5e59d38c4d0e361131e458e35afe9dfca5d5a0c93a14264ee2e791e247449b521de4ae8a6eda8eb41c3125cf6075
7
- data.tar.gz: 044cfb3186721a4d950c05ca602d6697b740a627bb3203407e48e508d54cf6500ec284117b91c1a60b62f989771eb9e9b2535d47af7bc86e044918beb3fcb66e
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 = 'ws://web.sockethook.io'
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 register(id)
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] || 0.1
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] || true
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] || 20
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
- @hooks.each do |hook|
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
@@ -1,6 +1,5 @@
1
1
  require 'codeclimate-test-reporter'
2
2
  require 'rspec'
3
- require 'wrong'
4
3
 
5
4
  CodeClimate::TestReporter.start if ENV['CODECLIMATE_REPO_TOKEN']
6
5
 
@@ -4,97 +4,57 @@ require 'securerandom'
4
4
  require 'rest-client'
5
5
 
6
6
  describe WebSocketHook do
7
- include Wrong
8
-
9
- it 'can initialize' do
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
- ws = WebSocketHook.new
32
- data = []
33
- t = Thread.new { ws.listen { |msg| data << msg } }
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
- eventually do
36
- data.any? do |line|
37
- line[:type] == 'open'
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 register a hook with an id' do
53
- id = "test_#{SecureRandom.hex(4)}"
54
- ws = WebSocketHook.new
55
- ws.register id
56
- data = []
57
- t = Thread.new { ws.listen { |msg| data << msg } }
58
-
59
- eventually do
60
- data.any? do |line|
61
- line[:type] == 'registered' && line[:data][:id] == id
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
- ws.stop
66
- t.kill
39
+ @ws.stop if msg[:type] == 'hook'
40
+ end
67
41
  end
68
42
 
69
- it 'can trigger a hook with data' do
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
- RestClient.post(hook_url,this_is_a:'test')
84
-
85
- check_eventually data do |line|
86
- line[:type] == 'hook' && line[:data] == {this_is_a:'test'}
87
- end
88
-
89
- ws.stop
90
- t.kill
91
- end
92
-
93
- def check_eventually(data, &block)
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.02
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: 2015-04-13 00:00:00.000000000 Z
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.9.2
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.9.2
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.2.0
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.2.0
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.4.7
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.4.7
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: 10.4.2
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: 10.4.2
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.4.6
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: