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