sse-rails-engine 1.2.1 → 1.2.2

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: 5ba7d9cea724ef6cd38b1ae06f4b0a037e575cee
4
- data.tar.gz: 8aef607c6e1908f4a07571842e59667271d44da1
3
+ metadata.gz: 215385adafbeb44e44ff64603e5e4777206f100a
4
+ data.tar.gz: 18f56fa8185eaa46cc67ef115d0123ee895d3cd7
5
5
  SHA512:
6
- metadata.gz: c433f71bb37b808669f96d6cddcb77c7547258329d5c3d40149a735375a807a3ae1a46534790a424b91d3631d4e8e72cbc5e172684f2955b24cbf18efbf84984
7
- data.tar.gz: 7d7965dd774c11512ffc7d156ef52753b0c478a3759dd36486e64fcd1305cecbebe085c65443974ff6862ba8837a02f9b21b76917f957c732a87f76fe395b600
6
+ metadata.gz: 57a701b21132ca315e60e79c93527eb1d35d4276b45f2c79059b3209909e360f43fdd9e699f1ac94fd2cfadb252c2c335b1f837c81fbd98661705df26e12456f
7
+ data.tar.gz: 5651157dba6581bb886589cb7f9b48cc116982c54d05427ae46e85d85eb42b0915ac1ac8b7a854588722fcce14d38690ab379aac139c16029e55b4cc6729a7bd
data/Rakefile CHANGED
@@ -14,12 +14,8 @@ RDoc::Task.new(:rdoc) do |rdoc|
14
14
  rdoc.rdoc_files.include('lib/**/*.rb')
15
15
  end
16
16
 
17
-
18
-
19
17
  load 'rails/tasks/statistics.rake'
20
18
 
21
-
22
-
23
19
  Bundler::GemHelper.install_tasks
24
20
 
25
21
  require 'rake/testtask'
@@ -31,5 +27,4 @@ Rake::TestTask.new(:test) do |t|
31
27
  t.verbose = false
32
28
  end
33
29
 
34
-
35
30
  task default: :test
@@ -1,2 +1,2 @@
1
1
 
2
- Rails.configuration.middleware.delete "Rack::Lock"
2
+ Rails.configuration.middleware.delete 'Rack::Lock'
@@ -1,14 +1,26 @@
1
1
  module SseRailsEngine
2
+ # This class provides the ability to track SSE connections and broadcast events
3
+ # to all connected clients from anywhere in your Rails app.
4
+ #
5
+ # Example Usage:
6
+ #
7
+ # class MyController < ActionController::Base
8
+ # def do_stuff
9
+ # SseRailsEngine.send_event('event name', 'any ruby object or string for data')
10
+ # end
11
+ # end
12
+ #
13
+ # Note: SSEs are not currently supported by IE.
2
14
  class Manager
3
15
  RackHijackUnsupported = Class.new RuntimeError
4
16
 
5
17
  attr_reader :connections, :heartbeat_thread
6
18
 
7
19
  SSE_HEADER = ["HTTP/1.1 200 OK\r\n",
8
- "Content-Type: text/event-stream\r\n",
9
- "Cache-Control: no-cache, no-store\r\n",
10
- "Connection: close\r\n",
11
- "\r\n"].join.freeze
20
+ "Content-Type: text/event-stream\r\n",
21
+ "Cache-Control: no-cache, no-store\r\n",
22
+ "Connection: close\r\n",
23
+ "\r\n"].join.freeze
12
24
 
13
25
  def initialize
14
26
  @mutex = Mutex.new
@@ -23,10 +35,11 @@ module SseRailsEngine
23
35
  # Perform full hijack of socket (http://old.blog.phusion.nl/2013/01/23/the-new-rack-socket-hijacking-api/)
24
36
  SseRailsEngine.manager.open_connection(socket)
25
37
  else
26
- raise RackHijackUnsupported, 'This Rack server does not support hijacking, ensure you are using >= v1.5 of Rack'
38
+ fail RackHijackUnsupported, 'This Rack server does not support hijacking, ensure you are using >= v1.5 of Rack'
27
39
  end
28
40
  end
29
41
 
42
+ # rubocop:disable Metrics/MethodLength
30
43
  def send_event(name, data)
31
44
  @mutex.synchronize do
32
45
  @connections.dup.each do |stream, sse|
@@ -43,6 +56,7 @@ module SseRailsEngine
43
56
  end
44
57
  end
45
58
  end
59
+ # rubocop:enable Metrics/MethodLength
46
60
 
47
61
  def open_connection(io)
48
62
  Rails.logger.debug "New SSE Client connected: #{io}"
@@ -54,7 +68,7 @@ module SseRailsEngine
54
68
 
55
69
  def call(env)
56
70
  SseRailsEngine.manager.register(env)
57
- [ -1, {}, []]
71
+ [-1, {}, []]
58
72
  end
59
73
 
60
74
  private
@@ -1,3 +1,3 @@
1
1
  module SseRailsEngine
2
- VERSION = "1.2.1"
2
+ VERSION = '1.2.2'
3
3
  end
@@ -71,3 +71,77 @@ Starting SSE heartbeat thread!
71
71
  New SSE Client connected: #<StringIO:0x007ff339278948>
72
72
  Starting SSE heartbeat thread!
73
73
  Starting SSE heartbeat thread!
74
+ Starting SSE heartbeat thread!
75
+ Starting SSE heartbeat thread!
76
+ New SSE Client connected: #<StringIO:0x007fcdfb259ec0>
77
+ Starting SSE heartbeat thread!
78
+ Starting SSE heartbeat thread!
79
+ New SSE Client connected: #<StringIO:0x007fcdfb230ef8>
80
+ Starting SSE heartbeat thread!
81
+ Starting SSE heartbeat thread!
82
+ New SSE Client connected: #<StringIO:0x007fcdfb21bc88>
83
+ Failed to send event to SSE: #<StringIO:0x007fcdfb21bc88> (foo, bar - RuntimeError (RuntimeError
84
+ Starting SSE heartbeat thread!
85
+ Starting SSE heartbeat thread!
86
+ New SSE Client connected: #<StringIO:0x007fcdfb2035c0>
87
+ SSE Client disconnected: #<StringIO:0x007fcdfb2035c0>
88
+ Starting SSE heartbeat thread!
89
+ New SSE Client connected: #<StringIO:0x007fcdfb200938>
90
+ Starting SSE heartbeat thread!
91
+ New SSE Client connected: #<StringIO:0x007fcdfb1fa290>
92
+ Starting SSE heartbeat thread!
93
+ Starting SSE heartbeat thread!
94
+ Starting SSE heartbeat thread!
95
+ Starting SSE heartbeat thread!
96
+ New SSE Client connected: #<StringIO:0x007fa81cd396b0>
97
+ Failed to send event to SSE: #<StringIO:0x007fa81cd396b0> (foo, bar - RuntimeError (RuntimeError
98
+ Starting SSE heartbeat thread!
99
+ Starting SSE heartbeat thread!
100
+ New SSE Client connected: #<StringIO:0x007fa81cd33288>
101
+ Starting SSE heartbeat thread!
102
+ New SSE Client connected: #<StringIO:0x007fa81cd23b58>
103
+ Starting SSE heartbeat thread!
104
+ New SSE Client connected: #<StringIO:0x007fa81cd21038>
105
+ Starting SSE heartbeat thread!
106
+ Starting SSE heartbeat thread!
107
+ New SSE Client connected: #<StringIO:0x007fa81cd13c80>
108
+ SSE Client disconnected: #<StringIO:0x007fa81cd13c80>
109
+ Starting SSE heartbeat thread!
110
+ New SSE Client connected: #<StringIO:0x007fa81cd10cd8>
111
+ Starting SSE heartbeat thread!
112
+ Starting SSE heartbeat thread!
113
+ New SSE Client connected: #<StringIO:0x007fd37d510920>
114
+ Failed to send event to SSE: #<StringIO:0x007fd37d510920> (foo, bar - RuntimeError (RuntimeError
115
+ Starting SSE heartbeat thread!
116
+ New SSE Client connected: #<StringIO:0x007fd37d4f9a40>
117
+ Starting SSE heartbeat thread!
118
+ Starting SSE heartbeat thread!
119
+ Starting SSE heartbeat thread!
120
+ New SSE Client connected: #<StringIO:0x007fd37d4d8368>
121
+ Starting SSE heartbeat thread!
122
+ New SSE Client connected: #<StringIO:0x007fd37d4c2a68>
123
+ SSE Client disconnected: #<StringIO:0x007fd37d4c2a68>
124
+ Starting SSE heartbeat thread!
125
+ New SSE Client connected: #<StringIO:0x007fd37d4bb9c0>
126
+ Starting SSE heartbeat thread!
127
+ New SSE Client connected: #<StringIO:0x007fd37d4b95f8>
128
+ Starting SSE heartbeat thread!
129
+ Starting SSE heartbeat thread!
130
+ Starting SSE heartbeat thread!
131
+ Starting SSE heartbeat thread!
132
+ New SSE Client connected: #<StringIO:0x007ff76cdeae70>
133
+ SSE Client disconnected: #<StringIO:0x007ff76cdeae70>
134
+ Starting SSE heartbeat thread!
135
+ New SSE Client connected: #<StringIO:0x007ff76cde3f30>
136
+ Starting SSE heartbeat thread!
137
+ Starting SSE heartbeat thread!
138
+ Starting SSE heartbeat thread!
139
+ New SSE Client connected: #<StringIO:0x007ff76cdcb728>
140
+ Starting SSE heartbeat thread!
141
+ Starting SSE heartbeat thread!
142
+ New SSE Client connected: #<StringIO:0x007ff76cdb2fe8>
143
+ Starting SSE heartbeat thread!
144
+ New SSE Client connected: #<StringIO:0x007ff76cdb0838>
145
+ Starting SSE heartbeat thread!
146
+ New SSE Client connected: #<StringIO:0x007ff76cda0118>
147
+ Failed to send event to SSE: #<StringIO:0x007ff76cda0118> (foo, bar - RuntimeError (RuntimeError
@@ -29,4 +29,9 @@ describe SseRailsEngine do
29
29
  end
30
30
  SseRailsEngine.heartbeat_interval.must_equal 1.minute
31
31
  end
32
+
33
+ it 'calls shortcut module function' do
34
+ SseRailsEngine.manager.expects(:send_event).once
35
+ SseRailsEngine.send_event('name', 'foo')
36
+ end
32
37
  end
@@ -1,12 +1,12 @@
1
1
  require_relative '../../test_helper'
2
2
 
3
3
  describe SseRailsEngine::Manager do
4
- let(:manager) { SseRailsEngine::manager }
5
- let(:env) {
4
+ let(:manager) { SseRailsEngine.manager }
5
+ let(:env) do
6
6
  Hashie::Mash.new('rack.hijack?' => true,
7
- 'rack.hijack' => ->() { },
7
+ 'rack.hijack' => ->() {},
8
8
  'rack.hijack_io' => StringIO.new)
9
- }
9
+ end
10
10
 
11
11
  before do
12
12
  SseRailsEngine.instance_variable_set(:@manager, nil)
@@ -54,19 +54,20 @@ describe SseRailsEngine::Manager do
54
54
 
55
55
  it 'writes event object to stream' do
56
56
  manager.register(env)
57
- manager.send_event('foo', { a: 123, 'b' => 'abc', c: { foo: 'bar' } })
58
- env['rack.hijack_io'].string.must_equal(SseRailsEngine::Manager::SSE_HEADER + "event: foo\ndata: {\"a\":123,\"b\":\"abc\",\"c\":{\"foo\":\"bar\"}}\n\n")
57
+ manager.send_event('foo', a: 123, 'b' => 'abc', c: { foo: 'bar' })
58
+ env['rack.hijack_io'].string.must_equal(
59
+ SseRailsEngine::Manager::SSE_HEADER + "event: foo\ndata: {\"a\":123,\"b\":\"abc\",\"c\":{\"foo\":\"bar\"}}\n\n")
59
60
  end
60
61
 
61
62
  it 'writes minimum headers to rack middleware' do
62
- manager.call(env).must_equal [ -1, {}, []]
63
+ manager.call(env).must_equal [-1, {}, []]
63
64
  end
64
65
 
65
66
  it 'ensures heartbeat is sent' do
66
- SseRailsEngine.stubs(:heartbeat_interval).returns(0,5)
67
+ SseRailsEngine.stubs(:heartbeat_interval).returns(0, 5)
67
68
  SseRailsEngine::Manager.unstub(:start_heartbeats)
68
69
  SseRailsEngine::Manager.any_instance.expects(:send_event).once
69
- manager = SseRailsEngine::Manager.new
70
+ SseRailsEngine::Manager.new
70
71
  sleep 0.2
71
72
  end
72
73
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sse-rails-engine
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shane Hender
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description: See the README.md at https://github.com/henders/sse-rails-engine
84
98
  email:
85
99
  - henders@gmail.com
@@ -129,8 +143,8 @@ files:
129
143
  - test/dummy/public/422.html
130
144
  - test/dummy/public/500.html
131
145
  - test/dummy/public/favicon.ico
146
+ - test/lib/sse-rails-engine_test.rb
132
147
  - test/lib/sse_rails_engine/manager_test.rb
133
- - test/lib/sse_rails_engine_test.rb
134
148
  - test/test_helper.rb
135
149
  homepage: https://github.com/henders/sse-rails-engine
136
150
  licenses:
@@ -190,6 +204,6 @@ test_files:
190
204
  - test/dummy/public/500.html
191
205
  - test/dummy/public/favicon.ico
192
206
  - test/dummy/Rakefile
207
+ - test/lib/sse-rails-engine_test.rb
193
208
  - test/lib/sse_rails_engine/manager_test.rb
194
- - test/lib/sse_rails_engine_test.rb
195
209
  - test/test_helper.rb