rasti-web-broadcaster 0.1.0 → 1.1.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
- SHA1:
3
- metadata.gz: c5ea9872ad3ad27ea065c433a32b300353bf158f
4
- data.tar.gz: c617495332f8606763045bfa2215dbb15b87af31
2
+ SHA256:
3
+ metadata.gz: 0e5290c1fe92680bd88bd05f57f91b1d49a6848516865a6da8cfdb8d47cf6f44
4
+ data.tar.gz: eef7f1069f999eddd07fe89a7d6059e95bd669fbae2030f75d2fef0b180bf2b5
5
5
  SHA512:
6
- metadata.gz: bb1500dd98e5a7f7bd2237778152091081460517a7fe6d9099557b9a9f16ed44703f277429e38d9eeaa3a5a6772abee95c3325710e2c21bda03a7bb8a991f3ba
7
- data.tar.gz: b387a4fc765699f4cb866e2338ecdcce9ee2114d74cafae042a7b88e6ac38b865ace9ac9ec0267aa6601a6c9cc01ff416087070f9fe87c401db681ffdfbcfce2
6
+ metadata.gz: db5ca61f44dcb3ebaab5557cca6c245a8e7bccca22833b2aaa0aa38428a0baa5e0c9b0f7c8133ac7fb7e132a2ee173d39e4135a486b747209ed90cadd2d71b60
7
+ data.tar.gz: 06bebe40478194b3dceea7fd7a2b670cd75997630170d7ab54b72f7142c57bcdaf3b94a2d6969bf26de1f3c3eeddd581a2bbe338fe205cf251fe14c6cc6db313
data/.travis.yml CHANGED
@@ -1,13 +1,23 @@
1
1
  language: ruby
2
+
2
3
  rvm:
3
- - 1.9.3
4
4
  - 2.0
5
5
  - 2.1
6
6
  - 2.2
7
- - 2.3.0
8
- - 2.4.0
9
- - jruby
10
- before_install:
11
- - gem install bundler
7
+ - 2.3
8
+ - 2.4
9
+ - 2.5
10
+ - 2.6
11
+ - 2.7
12
+ - jruby-9.2.9.0
13
+ - ruby-head
14
+ - jruby-head
15
+
16
+ matrix:
17
+ fast_finish: true
18
+ allow_failures:
19
+ - rvm: ruby-head
20
+ - rvm: jruby-head
21
+
12
22
  services:
13
23
  - redis-server
data/README.md CHANGED
@@ -4,7 +4,6 @@
4
4
  [![Build Status](https://travis-ci.org/gabynaiman/rasti-web-broadcaster.svg?branch=master)](https://travis-ci.org/gabynaiman/rasti-web-broadcaster)
5
5
  [![Coverage Status](https://coveralls.io/repos/gabynaiman/rasti-web-broadcaster/badge.svg?branch=master)](https://coveralls.io/r/gabynaiman/rasti-web-broadcaster?branch=master)
6
6
  [![Code Climate](https://codeclimate.com/github/gabynaiman/rasti-web-broadcaster.svg)](https://codeclimate.com/github/gabynaiman/rasti-web-broadcaster)
7
- [![Dependency Status](https://gemnasium.com/gabynaiman/rasti-web-broadcaster.svg)](https://gemnasium.com/gabynaiman/rasti-web-broadcaster)
8
7
 
9
8
  Enable server sent events with rack middleware implemented over Faye and Broadcaster (Redis Pub/Sub)
10
9
 
@@ -30,7 +29,7 @@ Or install it yourself as:
30
29
  ```ruby
31
30
  Rasti::Web::Broadcaster.configure do |config|
32
31
  config.id = 'AppName'
33
- config.redis_url = "redis://#{ENV['REDIS_HOST']}:#{ENV['REDIS_PORT']}"
32
+ config.redis_settings = "redis://#{ENV['REDIS_HOST']}:#{ENV['REDIS_PORT']}"
34
33
  config.logger = Logger.new "/log/#{ENV['RACK_ENV']}.log"
35
34
  end
36
35
  ```
@@ -38,6 +37,9 @@ end
38
37
  ### Rack middleware
39
38
  ```ruby
40
39
  use Rasti::Web::Broadcaster
40
+
41
+ headers = {'Access-Control-Allow-Origin' => '*'}
42
+ use Rasti::Web::Broadcaster, headers
41
43
  ```
42
44
 
43
45
  ### Publishing events from the web
@@ -51,7 +53,7 @@ Rasti::Web::Broadcaster.publish channel_id, data: 'hello' # string or json
51
53
  ```ruby
52
54
  require 'broadcaster'
53
55
 
54
- broadcaster = Broadcaster.new id: 'AppName', redis_url: "redis://#{ENV['REDIS_HOST']}:#{ENV['REDIS_PORT']}"
56
+ broadcaster = Broadcaster.new id: 'AppName', redis_settings: "redis://#{ENV['REDIS_HOST']}:#{ENV['REDIS_PORT']}"
55
57
 
56
58
  broadcaster.publish channel_id, data: 'hello'
57
59
  ```
@@ -3,6 +3,7 @@ require 'broadcaster'
3
3
  require 'class_config'
4
4
 
5
5
  require_relative 'broadcaster/safe_event_machine'
6
+ require_relative 'broadcaster/safe_rack_lint'
6
7
  require_relative 'broadcaster/version'
7
8
 
8
9
  module Rasti
@@ -11,9 +12,12 @@ module Rasti
11
12
 
12
13
  extend ClassConfig
13
14
 
14
- attr_config :id, 'rasti.web.broadcaster'
15
- attr_config :redis_url, 'redis://localhost:6379'
16
- attr_config :logger, Logger.new(STDOUT)
15
+ attr_config :id, 'rasti.web.broadcaster'
16
+ attr_config :redis_client, Redic
17
+ attr_config :redis_settings, 'redis://localhost:6379'
18
+ attr_config :logger, Logger.new(STDOUT)
19
+
20
+ @mutex = Mutex.new
17
21
 
18
22
  class << self
19
23
 
@@ -26,18 +30,21 @@ module Rasti
26
30
  private
27
31
 
28
32
  def broadcaster
29
- @broadcaster ||= ::Broadcaster.new configuration
33
+ @mutex.synchronize do
34
+ @broadcaster ||= ::Broadcaster.new configuration
35
+ end
30
36
  end
31
37
 
32
38
  end
33
39
 
34
- def initialize(app)
40
+ def initialize(app, headers={})
35
41
  @app = app
42
+ @headers = headers
36
43
  end
37
44
 
38
45
  def call(env)
39
46
  if Faye::EventSource.eventsource? env
40
- event_source = Faye::EventSource.new env
47
+ event_source = Faye::EventSource.new env, headers: @headers
41
48
  channel = env['PATH_INFO'][1..-1]
42
49
 
43
50
  subscription_id = self.class.subscribe channel do |message|
@@ -0,0 +1,7 @@
1
+ if defined?(Rack::Lint::HijackWrapper) && !Rack::Lint::HijackWrapper.instance_methods.include?(:to_int)
2
+ class Rack::Lint::HijackWrapper
3
+ def to_int
4
+ @io.to_i
5
+ end
6
+ end
7
+ end
@@ -1,7 +1,7 @@
1
1
  module Rasti
2
2
  module Web
3
3
  class Broadcaster
4
- VERSION = '0.1.0'
4
+ VERSION = '1.1.2'
5
5
  end
6
6
  end
7
7
  end
@@ -18,13 +18,12 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ['lib']
20
20
 
21
- spec.add_runtime_dependency 'faye-websocket', '~> 0.10'
22
- spec.add_runtime_dependency 'broadcaster', '~> 0.1'
21
+ spec.add_runtime_dependency 'faye-websocket', '~> 0.11'
22
+ spec.add_runtime_dependency 'broadcaster', '~> 1.0', '>= 1.0.2'
23
23
  spec.add_runtime_dependency 'class_config', '~> 0.0'
24
24
 
25
- spec.add_development_dependency 'bundler', '~> 1.12'
26
- spec.add_development_dependency 'rake', '~> 11.0'
27
- spec.add_development_dependency 'minitest', '~> 5.0'
25
+ spec.add_development_dependency 'rake', '~> 12.0'
26
+ spec.add_development_dependency 'minitest', '~> 5.0', '< 5.11'
28
27
  spec.add_development_dependency 'minitest-colorin', '~> 0.1'
29
28
  spec.add_development_dependency 'minitest-line', '~> 0.6'
30
29
  spec.add_development_dependency 'simplecov', '~> 0.12'
@@ -32,13 +31,7 @@ Gem::Specification.new do |spec|
32
31
  spec.add_development_dependency 'pry-nav', '~> 0.2'
33
32
  spec.add_development_dependency 'rack-test', '~> 0.6'
34
33
 
35
- if RUBY_VERSION < '2'
36
- spec.add_development_dependency 'term-ansicolor', '~> 1.3.0'
37
- spec.add_development_dependency 'tins', '~> 1.6.0'
38
- spec.add_development_dependency 'json', '~> 1.8'
39
- end
40
-
41
34
  if RUBY_VERSION < '2.2.2'
42
35
  spec.add_development_dependency 'rack', '< 2'
43
36
  end
44
- end
37
+ end
@@ -8,6 +8,7 @@ describe Rasti::Web::Broadcaster do
8
8
  event << 'Content-Type: text/event-stream'
9
9
  event << 'Cache-Control: no-cache, no-store'
10
10
  event << 'Connection: close'
11
+ event << 'Access-Control-Allow-Origin: *'
11
12
  event << ''
12
13
  event << 'retry: 5000'
13
14
  event << ''
@@ -33,7 +34,11 @@ describe Rasti::Web::Broadcaster do
33
34
  end
34
35
  end
35
36
 
36
- let(:app) { Rasti::Web::Broadcaster.new ->(env) { [200, {}, ['hello']] } }
37
+ let(:headers) { {'Access-Control-Allow-Origin' => '*'} }
38
+
39
+ let(:inner_app) { ->(env) { [200, {}, ['hello']] } }
40
+
41
+ let(:app) { Rasti::Web::Broadcaster.new inner_app, headers }
37
42
 
38
43
  it 'Handle events' do
39
44
  env = Rack::MockRequest.env_for '/channel_1', 'HTTP_ACCEPT' => 'text/event-stream',
@@ -41,12 +46,12 @@ describe Rasti::Web::Broadcaster do
41
46
 
42
47
  event_source = nil
43
48
  events = []
44
-
49
+
45
50
  env['async.callback'] = proc do |(status, headers, body)|
46
51
  event_source = body.instance_variable_get(:@socket_object)
47
52
  body.each { |e| events << e }
48
53
  end
49
-
54
+
50
55
  Rasti::Web::Broadcaster.publish 'channel_1', data: 'message 0'
51
56
 
52
57
  app.call env
@@ -61,7 +66,7 @@ describe Rasti::Web::Broadcaster do
61
66
 
62
67
  events.must_equal [
63
68
  event_headers,
64
- event_for(data: 'message 1', event: 'event_1', id: 1),
69
+ event_for(data: 'message 1', event: 'event_1', id: 1),
65
70
  event_for(data: 'message 3')
66
71
  ]
67
72
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rasti-web-broadcaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gabriel Naiman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-13 00:00:00.000000000 Z
11
+ date: 2021-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faye-websocket
@@ -16,28 +16,34 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.10'
19
+ version: '0.11'
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.10'
26
+ version: '0.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: broadcaster
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
33
+ version: '1.0'
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 1.0.2
34
37
  type: :runtime
35
38
  prerelease: false
36
39
  version_requirements: !ruby/object:Gem::Requirement
37
40
  requirements:
38
41
  - - "~>"
39
42
  - !ruby/object:Gem::Version
40
- version: '0.1'
43
+ version: '1.0'
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ version: 1.0.2
41
47
  - !ruby/object:Gem::Dependency
42
48
  name: class_config
43
49
  requirement: !ruby/object:Gem::Requirement
@@ -52,34 +58,20 @@ dependencies:
52
58
  - - "~>"
53
59
  - !ruby/object:Gem::Version
54
60
  version: '0.0'
55
- - !ruby/object:Gem::Dependency
56
- name: bundler
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.12'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.12'
69
61
  - !ruby/object:Gem::Dependency
70
62
  name: rake
71
63
  requirement: !ruby/object:Gem::Requirement
72
64
  requirements:
73
65
  - - "~>"
74
66
  - !ruby/object:Gem::Version
75
- version: '11.0'
67
+ version: '12.0'
76
68
  type: :development
77
69
  prerelease: false
78
70
  version_requirements: !ruby/object:Gem::Requirement
79
71
  requirements:
80
72
  - - "~>"
81
73
  - !ruby/object:Gem::Version
82
- version: '11.0'
74
+ version: '12.0'
83
75
  - !ruby/object:Gem::Dependency
84
76
  name: minitest
85
77
  requirement: !ruby/object:Gem::Requirement
@@ -87,6 +79,9 @@ dependencies:
87
79
  - - "~>"
88
80
  - !ruby/object:Gem::Version
89
81
  version: '5.0'
82
+ - - "<"
83
+ - !ruby/object:Gem::Version
84
+ version: '5.11'
90
85
  type: :development
91
86
  prerelease: false
92
87
  version_requirements: !ruby/object:Gem::Requirement
@@ -94,6 +89,9 @@ dependencies:
94
89
  - - "~>"
95
90
  - !ruby/object:Gem::Version
96
91
  version: '5.0'
92
+ - - "<"
93
+ - !ruby/object:Gem::Version
94
+ version: '5.11'
97
95
  - !ruby/object:Gem::Dependency
98
96
  name: minitest-colorin
99
97
  requirement: !ruby/object:Gem::Requirement
@@ -198,6 +196,7 @@ files:
198
196
  - lib/rasti-web-broadcaster.rb
199
197
  - lib/rasti/web/broadcaster.rb
200
198
  - lib/rasti/web/broadcaster/safe_event_machine.rb
199
+ - lib/rasti/web/broadcaster/safe_rack_lint.rb
201
200
  - lib/rasti/web/broadcaster/version.rb
202
201
  - rasti-web-broadcaster.gemspec
203
202
  - spec/coverage_helper.rb
@@ -222,8 +221,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
222
221
  - !ruby/object:Gem::Version
223
222
  version: '0'
224
223
  requirements: []
225
- rubyforge_project:
226
- rubygems_version: 2.5.1
224
+ rubygems_version: 3.0.6
227
225
  signing_key:
228
226
  specification_version: 4
229
227
  summary: Rack middleware for server sent events