sse-rails-engine 1.2.0 → 1.2.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: 1e920b7f5c24984ee2a13737addac7cc27a8649a
4
- data.tar.gz: ed5350675bd43869264955774542192abf3d83a5
3
+ metadata.gz: 5ba7d9cea724ef6cd38b1ae06f4b0a037e575cee
4
+ data.tar.gz: 8aef607c6e1908f4a07571842e59667271d44da1
5
5
  SHA512:
6
- metadata.gz: f7ec726a3b2d2a52ec5477d38516feb4b50c2d9375bb32b6420a87f50057230922b2f879f2fe1fec3af07671680d09964b0e5e04c381eea711e6ecf8410ee940
7
- data.tar.gz: c1b5081cc1d244619563b441d6ecdb2f6f82712e4c1ff6e51e1d73b196a9204e5cd76a843635d0cf755a6faada48d349ccd3a8aa50d70d7801618417b6cc31de
6
+ metadata.gz: c433f71bb37b808669f96d6cddcb77c7547258329d5c3d40149a735375a807a3ae1a46534790a424b91d3631d4e8e72cbc5e172684f2955b24cbf18efbf84984
7
+ data.tar.gz: 7d7965dd774c11512ffc7d156ef52753b0c478a3759dd36486e64fcd1305cecbebe085c65443974ff6862ba8837a02f9b21b76917f957c732a87f76fe395b600
@@ -1,6 +1,8 @@
1
1
  module SseRailsEngine
2
2
  class Manager
3
- attr_reader :connections
3
+ RackHijackUnsupported = Class.new RuntimeError
4
+
5
+ attr_reader :connections, :heartbeat_thread
4
6
 
5
7
  SSE_HEADER = ["HTTP/1.1 200 OK\r\n",
6
8
  "Content-Type: text/event-stream\r\n",
@@ -21,7 +23,7 @@ module SseRailsEngine
21
23
  # Perform full hijack of socket (http://old.blog.phusion.nl/2013/01/23/the-new-rack-socket-hijacking-api/)
22
24
  SseRailsEngine.manager.open_connection(socket)
23
25
  else
24
- raise 'This Rack server does not support hijacking, ensure you are using >= v1.5 of Rack'
26
+ raise RackHijackUnsupported, 'This Rack server does not support hijacking, ensure you are using >= v1.5 of Rack'
25
27
  end
26
28
  end
27
29
 
@@ -65,7 +67,7 @@ module SseRailsEngine
65
67
 
66
68
  def start_heartbeats
67
69
  Rails.logger.debug 'Starting SSE heartbeat thread!'
68
- Thread.new do
70
+ @heartbeat_thread = Thread.new do
69
71
  loop do
70
72
  sleep SseRailsEngine.heartbeat_interval
71
73
  send_event('heartbeat', '')
@@ -1,3 +1,3 @@
1
1
  module SseRailsEngine
2
- VERSION = "1.2.0"
2
+ VERSION = "1.2.1"
3
3
  end
@@ -1,11 +1,73 @@
1
1
  Starting SSE heartbeat thread!
2
2
  Starting SSE heartbeat thread!
3
- New SSE Client connected: #<StringIO:0x007fa8041d31a8>
4
- SSE Client disconnected: #<StringIO:0x007fa8041d31a8>
5
3
  Starting SSE heartbeat thread!
6
- New SSE Client connected: #<StringIO:0x007fa8041d0020>
7
4
  Starting SSE heartbeat thread!
8
- New SSE Client connected: #<StringIO:0x007fa8041c9338>
9
5
  Starting SSE heartbeat thread!
10
6
  Starting SSE heartbeat thread!
11
- New SSE Client connected: #<StringIO:0x007fa8041c0850>
7
+ Starting SSE heartbeat thread!
8
+ Starting SSE heartbeat thread!
9
+ Starting SSE heartbeat thread!
10
+ Starting SSE heartbeat thread!
11
+ Starting SSE heartbeat thread!
12
+ Starting SSE heartbeat thread!
13
+ Starting SSE heartbeat thread!
14
+ Starting SSE heartbeat thread!
15
+ Starting SSE heartbeat thread!
16
+ Starting SSE heartbeat thread!
17
+ New SSE Client connected: #<StringIO:0x007fc5cb2272a0>
18
+ Failed to send event to SSE: #<StringIO:0x007fc5cb2272a0> (foo, bar - RuntimeError (RuntimeError
19
+ Starting SSE heartbeat thread!
20
+ Starting SSE heartbeat thread!
21
+ New SSE Client connected: #<StringIO:0x007fe0c42c4190>
22
+ Starting SSE heartbeat thread!
23
+ Starting SSE heartbeat thread!
24
+ Starting SSE heartbeat thread!
25
+ Starting SSE heartbeat thread!
26
+ Starting SSE heartbeat thread!
27
+ Starting SSE heartbeat thread!
28
+ Starting SSE heartbeat thread!
29
+ Starting SSE heartbeat thread!
30
+ Starting SSE heartbeat thread!
31
+ Starting SSE heartbeat thread!
32
+ Starting SSE heartbeat thread!
33
+ Starting SSE heartbeat thread!
34
+ Starting SSE heartbeat thread!
35
+ Starting SSE heartbeat thread!
36
+ Starting SSE heartbeat thread!
37
+ Starting SSE heartbeat thread!
38
+ Starting SSE heartbeat thread!
39
+ New SSE Client connected: #<StringIO:0x007f97591563a8>
40
+ SSE Client disconnected: #<StringIO:0x007f97591563a8>
41
+ Starting SSE heartbeat thread!
42
+ New SSE Client connected: #<StringIO:0x007f975914ef18>
43
+ Starting SSE heartbeat thread!
44
+ New SSE Client connected: #<StringIO:0x007f97591474e8>
45
+ Failed to send event to SSE: #<StringIO:0x007f97591474e8> (foo, bar - RuntimeError (RuntimeError
46
+ Starting SSE heartbeat thread!
47
+ Starting SSE heartbeat thread!
48
+ New SSE Client connected: #<StringIO:0x007f975913dba0>
49
+ Starting SSE heartbeat thread!
50
+ Starting SSE heartbeat thread!
51
+ Starting SSE heartbeat thread!
52
+ New SSE Client connected: #<StringIO:0x007f9759124f88>
53
+ Starting SSE heartbeat thread!
54
+ New SSE Client connected: #<StringIO:0x007f975911ec50>
55
+ Starting SSE heartbeat thread!
56
+ Starting SSE heartbeat thread!
57
+ Starting SSE heartbeat thread!
58
+ New SSE Client connected: #<StringIO:0x007ff3392c3a88>
59
+ Failed to send event to SSE: #<StringIO:0x007ff3392c3a88> (foo, bar - RuntimeError (RuntimeError
60
+ Starting SSE heartbeat thread!
61
+ New SSE Client connected: #<StringIO:0x007ff3392ba4b0>
62
+ Starting SSE heartbeat thread!
63
+ New SSE Client connected: #<StringIO:0x007ff3392aad08>
64
+ Starting SSE heartbeat thread!
65
+ Starting SSE heartbeat thread!
66
+ New SSE Client connected: #<StringIO:0x007ff339282bf0>
67
+ Starting SSE heartbeat thread!
68
+ New SSE Client connected: #<StringIO:0x007ff33927b4b8>
69
+ SSE Client disconnected: #<StringIO:0x007ff33927b4b8>
70
+ Starting SSE heartbeat thread!
71
+ New SSE Client connected: #<StringIO:0x007ff339278948>
72
+ Starting SSE heartbeat thread!
73
+ Starting SSE heartbeat thread!
@@ -13,6 +13,11 @@ describe SseRailsEngine::Manager do
13
13
  SseRailsEngine::Manager.stubs(:start_heartbeats).returns(true)
14
14
  end
15
15
 
16
+ it 'ensures rack supports hijacking' do
17
+ env['rack.hijack'] = nil
18
+ assert_raises(SseRailsEngine::Manager::RackHijackUnsupported) { manager.register(env) }
19
+ end
20
+
16
21
  it 'registers new response streams' do
17
22
  manager.connections.size.must_equal 0
18
23
  manager.register(env)
@@ -32,6 +37,15 @@ describe SseRailsEngine::Manager do
32
37
  manager.connections.size.must_equal 0
33
38
  end
34
39
 
40
+ it 'closes connection when failed sending event to client' do
41
+ ActionController::Live::SSE.any_instance.stubs(:write).raises(RuntimeError)
42
+
43
+ manager.register(env)
44
+ manager.connections.size.must_equal 1
45
+ manager.send_event('foo', 'bar')
46
+ manager.connections.size.must_equal 0
47
+ end
48
+
35
49
  it 'writes string event to stream' do
36
50
  manager.register(env)
37
51
  manager.send_event('foo', 'bar')
@@ -43,4 +57,16 @@ describe SseRailsEngine::Manager do
43
57
  manager.send_event('foo', { a: 123, 'b' => 'abc', c: { foo: 'bar' } })
44
58
  env['rack.hijack_io'].string.must_equal(SseRailsEngine::Manager::SSE_HEADER + "event: foo\ndata: {\"a\":123,\"b\":\"abc\",\"c\":{\"foo\":\"bar\"}}\n\n")
45
59
  end
60
+
61
+ it 'writes minimum headers to rack middleware' do
62
+ manager.call(env).must_equal [ -1, {}, []]
63
+ end
64
+
65
+ it 'ensures heartbeat is sent' do
66
+ SseRailsEngine.stubs(:heartbeat_interval).returns(0,5)
67
+ SseRailsEngine::Manager.unstub(:start_heartbeats)
68
+ SseRailsEngine::Manager.any_instance.expects(:send_event).once
69
+ manager = SseRailsEngine::Manager.new
70
+ sleep 0.2
71
+ end
46
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sse-rails-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Hender
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-21 00:00:00.000000000 Z
11
+ date: 2015-04-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails