message_bus 2.2.3 → 2.2.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of message_bus might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG +6 -0
- data/Gemfile +2 -0
- data/Guardfile +1 -0
- data/README.md +15 -0
- data/Rakefile +1 -0
- data/assets/message-bus.js +5 -1
- data/examples/bench/config.ru +1 -0
- data/examples/bench/puma.rb +1 -0
- data/examples/bench/unicorn.conf.rb +1 -0
- data/examples/chat/Gemfile +1 -0
- data/examples/chat/chat.rb +2 -0
- data/examples/chat/config.ru +2 -0
- data/examples/diagnostics/Gemfile +1 -0
- data/examples/diagnostics/config.ru +1 -0
- data/examples/minimal/Gemfile +1 -0
- data/examples/minimal/config.ru +1 -0
- data/lib/message_bus/diagnostics.rb +1 -0
- data/lib/message_bus/em_ext.rb +1 -0
- data/lib/message_bus/http_client.rb +2 -1
- data/lib/message_bus/http_client/channel.rb +1 -0
- data/lib/message_bus/version.rb +1 -1
- data/spec/assets/support/jasmine_helper.rb +1 -0
- data/spec/fixtures/test/Gemfile +1 -0
- data/spec/fixtures/test/config.ru +1 -0
- data/spec/helpers.rb +1 -0
- data/spec/integration/http_client_spec.rb +2 -0
- data/spec/lib/fake_async_middleware.rb +3 -2
- data/spec/lib/message_bus/assets/asset_encoding_spec.rb +1 -0
- data/spec/lib/message_bus/backend_spec.rb +2 -0
- data/spec/lib/message_bus/client_spec.rb +3 -1
- data/spec/lib/message_bus/connection_manager_spec.rb +3 -1
- data/spec/lib/message_bus/distributed_cache_spec.rb +2 -0
- data/spec/lib/message_bus/multi_process_spec.rb +2 -0
- data/spec/lib/message_bus/rack/middleware_spec.rb +1 -0
- data/spec/lib/message_bus/timer_thread_spec.rb +2 -0
- data/spec/lib/message_bus_spec.rb +2 -0
- data/spec/performance/publish.rb +2 -0
- data/spec/spec_helper.rb +3 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 93e3bc28f1411da6037721acabab32fa504542bb68238afe6671f10bfccfa194
|
4
|
+
data.tar.gz: b25d3013be8f3a0efa180db29de0ac6a55e5ce08ea87f80c912f046b9548c821
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c74493de8f9f2dc5305457696988d7f07dce56642a8796d3757a0e5bf4e14f6e9b011ed8bd9255e0d3dc197c290bbdafedcf47e2519f09ca085ec86f33848508
|
7
|
+
data.tar.gz: e4778edb5d540ef011ad29916dd8e4a374b04fb5dcd57ef80542b9f0b0985f5887609bf67b071455ebd15e59386eb0abc30698d015a4585f66a4d7afd217fc05
|
data/CHANGELOG
CHANGED
data/Gemfile
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
source 'https://rubygems.org'
|
2
3
|
|
3
4
|
# Specify your gem's dependencies in message_bus.gemspec
|
@@ -6,6 +7,7 @@ gemspec
|
|
6
7
|
group :test do
|
7
8
|
gem 'minitest'
|
8
9
|
gem 'minitest-hooks'
|
10
|
+
gem 'minitest-global_expectations'
|
9
11
|
gem 'rake'
|
10
12
|
gem 'http_parser.rb'
|
11
13
|
gem 'thin'
|
data/Guardfile
CHANGED
data/README.md
CHANGED
@@ -8,6 +8,8 @@ Since long-polling is implemented using Rack Hijack and Thin::Async, all common
|
|
8
8
|
|
9
9
|
MessageBus is implemented as Rack middleware and can be used by any Rails / Sinatra or pure Rack application.
|
10
10
|
|
11
|
+
Read the generated docs: <https://www.rubydoc.info/gems/message_bus>
|
12
|
+
|
11
13
|
## Try it out!
|
12
14
|
|
13
15
|
Live chat demo per [examples/chat](https://github.com/SamSaffron/message_bus/tree/master/examples/chat) is at:
|
@@ -278,6 +280,7 @@ backgroundCallbackInterval|60000|Interval to poll when long polling is disabled
|
|
278
280
|
minPollInterval|100|When polling requests succeed, this is the minimum amount of time to wait before making the next request.
|
279
281
|
maxPollInterval|180000|If request to the server start failing, MessageBus will backoff, this is the upper limit of the backoff.
|
280
282
|
alwaysLongPoll|false|For debugging you may want to disable the "is browser in background" check and always long-poll
|
283
|
+
shouldLongPollCallback|undefined|A callback returning true or false that determines if we should long-poll or not, if unset ignore and simply depend on window visibility.
|
281
284
|
baseUrl|/|If message bus is mounted at a sub-path or different domain, you may configure it to perform requests there
|
282
285
|
ajax|$.ajax falling back to XMLHttpRequest|MessageBus will first attempt to use jQuery and then fallback to a plain XMLHttpRequest version that's contained in the `message-bus-ajax.js` file. `message-bus-ajax.js` must be loaded after `message-bus.js` for it to be used. You may override this option with a function that implements an ajax request by some other means
|
283
286
|
headers|{}|Extra headers to be include with requests. Properties and values of object must be valid values for HTTP Headers, i.e. no spaces or control characters.
|
@@ -561,6 +564,18 @@ MessageBus.configure(on_middleware_error: proc do |env, e|
|
|
561
564
|
end)
|
562
565
|
```
|
563
566
|
|
567
|
+
### Adding extra response headers
|
568
|
+
|
569
|
+
In e.g. `config/initializers/message_bus.rb`:
|
570
|
+
|
571
|
+
```ruby
|
572
|
+
MessageBus.extra_response_headers_lookup do |env|
|
573
|
+
[
|
574
|
+
["Access-Control-Allow-Origin", "http://example.com:3000"],
|
575
|
+
]
|
576
|
+
end
|
577
|
+
```
|
578
|
+
|
564
579
|
## How it works
|
565
580
|
|
566
581
|
MessageBus provides durable messaging following the publish-subscribe (pubsub) pattern to subscribers who track their own subscriptions. Durability is by virtue of the persistence of messages in backlogs stored in the selected backend implementation (Redis, Postgres, etc) which can be queried up until a configurable expiry. Subscribers must keep track of the ID of the last message they processed, and request only more-recent messages in subsequent connections.
|
data/Rakefile
CHANGED
data/assets/message-bus.js
CHANGED
@@ -99,7 +99,10 @@
|
|
99
99
|
};
|
100
100
|
|
101
101
|
shouldLongPoll = function() {
|
102
|
-
return
|
102
|
+
return (
|
103
|
+
me.alwaysLongPoll ||
|
104
|
+
(me.shouldLongPollCallback ? me.shouldLongPollCallback() : !isHidden())
|
105
|
+
);
|
103
106
|
};
|
104
107
|
|
105
108
|
var totalAjaxFailures = 0;
|
@@ -377,6 +380,7 @@
|
|
377
380
|
callbacks: callbacks,
|
378
381
|
clientId: clientId,
|
379
382
|
alwaysLongPoll: false,
|
383
|
+
shouldLongPollCallback: undefined,
|
380
384
|
baseUrl: baseUrl,
|
381
385
|
headers: {},
|
382
386
|
ajax: jQuery && jQuery.ajax,
|
data/examples/bench/config.ru
CHANGED
data/examples/bench/puma.rb
CHANGED
data/examples/chat/Gemfile
CHANGED
data/examples/chat/chat.rb
CHANGED
data/examples/chat/config.ru
CHANGED
data/examples/minimal/Gemfile
CHANGED
data/examples/minimal/config.ru
CHANGED
data/lib/message_bus/em_ext.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'securerandom'
|
2
3
|
require 'net/http'
|
3
4
|
require 'json'
|
@@ -245,7 +246,7 @@ module MessageBus
|
|
245
246
|
request.body = poll_payload
|
246
247
|
|
247
248
|
if @enable_long_polling
|
248
|
-
buffer =
|
249
|
+
buffer = +""
|
249
250
|
|
250
251
|
http.request(request) do |response|
|
251
252
|
response.read_body do |chunk|
|
data/lib/message_bus/version.rb
CHANGED
data/spec/fixtures/test/Gemfile
CHANGED
data/spec/helpers.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'http/parser'
|
2
3
|
class FakeAsyncMiddleware
|
3
4
|
def initialize(app, config = {})
|
@@ -53,7 +54,7 @@ class FakeAsyncMiddleware
|
|
53
54
|
|
54
55
|
def translate_io_result(io)
|
55
56
|
data = io.string
|
56
|
-
body = ""
|
57
|
+
body = +""
|
57
58
|
|
58
59
|
parser = Http::Parser.new
|
59
60
|
parser.on_body = proc { |chunk| body << chunk }
|
@@ -112,7 +113,7 @@ class FakeAsyncMiddleware
|
|
112
113
|
# more judo with deferrable body, at this point we just have headers
|
113
114
|
r[2].callback do
|
114
115
|
# even more judo cause rack test does not call each like the spec says
|
115
|
-
body = ""
|
116
|
+
body = +""
|
116
117
|
r[2].each do |m|
|
117
118
|
body << m
|
118
119
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../../spec_helper'
|
2
4
|
require 'message_bus'
|
3
5
|
|
@@ -83,7 +85,7 @@ describe MessageBus::Client do
|
|
83
85
|
|
84
86
|
data[-5..-1].must_equal "0\r\n\r\n"
|
85
87
|
|
86
|
-
_, _, chunks = http_parse("HTTP/1.1 200 OK\r\n\r\n" << data)
|
88
|
+
_, _, chunks = http_parse(+"HTTP/1.1 200 OK\r\n\r\n" << data)
|
87
89
|
|
88
90
|
chunks.length.must_equal 2
|
89
91
|
|
data/spec/performance/publish.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$: << File.dirname(__FILE__)
|
2
4
|
$: << File.join(File.dirname(__FILE__), '..', 'lib')
|
3
5
|
require 'thin'
|
@@ -5,7 +7,7 @@ require 'lib/fake_async_middleware'
|
|
5
7
|
require 'message_bus'
|
6
8
|
|
7
9
|
require 'minitest/autorun'
|
8
|
-
require 'minitest/
|
10
|
+
require 'minitest/global_expectations'
|
9
11
|
|
10
12
|
require_relative "helpers"
|
11
13
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: message_bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Saffron
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|