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.

Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +6 -0
  3. data/Gemfile +2 -0
  4. data/Guardfile +1 -0
  5. data/README.md +15 -0
  6. data/Rakefile +1 -0
  7. data/assets/message-bus.js +5 -1
  8. data/examples/bench/config.ru +1 -0
  9. data/examples/bench/puma.rb +1 -0
  10. data/examples/bench/unicorn.conf.rb +1 -0
  11. data/examples/chat/Gemfile +1 -0
  12. data/examples/chat/chat.rb +2 -0
  13. data/examples/chat/config.ru +2 -0
  14. data/examples/diagnostics/Gemfile +1 -0
  15. data/examples/diagnostics/config.ru +1 -0
  16. data/examples/minimal/Gemfile +1 -0
  17. data/examples/minimal/config.ru +1 -0
  18. data/lib/message_bus/diagnostics.rb +1 -0
  19. data/lib/message_bus/em_ext.rb +1 -0
  20. data/lib/message_bus/http_client.rb +2 -1
  21. data/lib/message_bus/http_client/channel.rb +1 -0
  22. data/lib/message_bus/version.rb +1 -1
  23. data/spec/assets/support/jasmine_helper.rb +1 -0
  24. data/spec/fixtures/test/Gemfile +1 -0
  25. data/spec/fixtures/test/config.ru +1 -0
  26. data/spec/helpers.rb +1 -0
  27. data/spec/integration/http_client_spec.rb +2 -0
  28. data/spec/lib/fake_async_middleware.rb +3 -2
  29. data/spec/lib/message_bus/assets/asset_encoding_spec.rb +1 -0
  30. data/spec/lib/message_bus/backend_spec.rb +2 -0
  31. data/spec/lib/message_bus/client_spec.rb +3 -1
  32. data/spec/lib/message_bus/connection_manager_spec.rb +3 -1
  33. data/spec/lib/message_bus/distributed_cache_spec.rb +2 -0
  34. data/spec/lib/message_bus/multi_process_spec.rb +2 -0
  35. data/spec/lib/message_bus/rack/middleware_spec.rb +1 -0
  36. data/spec/lib/message_bus/timer_thread_spec.rb +2 -0
  37. data/spec/lib/message_bus_spec.rb +2 -0
  38. data/spec/performance/publish.rb +2 -0
  39. data/spec/spec_helper.rb +3 -1
  40. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 46de79e771fac3fb31c3edc55b0866842b6dc108df65c5bcbd7d1062568a6279
4
- data.tar.gz: 201cb983ab710b1fe487f69105a13f0291873bf94c8a5e16f1749993a22ddc74
3
+ metadata.gz: 93e3bc28f1411da6037721acabab32fa504542bb68238afe6671f10bfccfa194
4
+ data.tar.gz: b25d3013be8f3a0efa180db29de0ac6a55e5ce08ea87f80c912f046b9548c821
5
5
  SHA512:
6
- metadata.gz: 633808d11a69d4f6e7c8e53f4805c6bff2d5cd5e57b4c38a166af355e8c6cd2e423c6b27cb0f861597cda6b65dedb0c2bf46edfe5b7fada98b79e8f1bed7d38a
7
- data.tar.gz: d38cb6e67c791a9e1e3dcaef8764517e47a363fa4045aed35eedff84cdbdf2a7da85bf0e55a2f00c4c877612bf46ce3dbaea430786afb6dd903ae090b4144638
6
+ metadata.gz: c74493de8f9f2dc5305457696988d7f07dce56642a8796d3757a0e5bf4e14f6e9b011ed8bd9255e0d3dc197c290bbdafedcf47e2519f09ca085ec86f33848508
7
+ data.tar.gz: e4778edb5d540ef011ad29916dd8e4a374b04fb5dcd57ef80542b9f0b0985f5887609bf67b071455ebd15e59386eb0abc30698d015a4585f66a4d7afd217fc05
data/CHANGELOG CHANGED
@@ -1,3 +1,9 @@
1
+ 26-03-2020
2
+
3
+ - Version 2.2.4
4
+
5
+ - FEATURE: shouldLongPollCallback optional setting which allows overriding decision about long polling
6
+
1
7
  18-10-2019
2
8
 
3
9
  - Version 2.2.3
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # A sample Guardfile
2
3
  # More info at https://github.com/guard/guard#readme
3
4
 
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
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'rubygems'
2
3
  require 'rake/testtask'
3
4
  require 'bundler'
@@ -99,7 +99,10 @@
99
99
  };
100
100
 
101
101
  shouldLongPoll = function() {
102
- return me.alwaysLongPoll || !isHidden();
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,
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  $LOAD_PATH.unshift File.expand_path('../../../lib', __FILE__)
2
3
 
3
4
  require 'message_bus'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'message_bus'
2
3
  on_worker_boot do
3
4
  MessageBus.after_fork
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'message_bus'
2
3
  after_fork do |_server, _worker|
3
4
  MessageBus.after_fork
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  gem 'puma'
2
3
  gem 'redis'
3
4
  gem 'sinatra'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH.unshift File.expand_path('../../../lib', __FILE__)
2
4
  require 'message_bus'
3
5
  require 'sinatra'
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require './chat'
2
4
  run Chat
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gem 'message_bus', path: '../..'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'message_bus'
2
3
 
3
4
  MessageBus.configure(backend: :redis, url: ENV['REDISURL'])
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gem 'message_bus'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'message_bus'
2
3
 
3
4
  # MessageBus.long_polling_interval = 1000 * 2
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # MessageBus diagnostics are used for troubleshooting the bus and optimising its configuration
2
3
  # @see MessageBus::Rack::Diagnostics
3
4
  class MessageBus::Diagnostics
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module EM
2
3
  def self.reactor_pid
3
4
  @reactor_pid
@@ -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|
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module MessageBus
2
3
  class HTTPClient
3
4
  # @private
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MessageBus
4
- VERSION = "2.2.3"
4
+ VERSION = "2.2.4"
5
5
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  Jasmine.configure do |_config|
2
3
  # patch for travis
3
4
  if ENV['TRAVIS']
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  gem 'message_bus'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'message_bus'
2
3
 
3
4
  MessageBus.config[:backend] = :memory
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  def wait_for(timeout_milliseconds = 2000)
2
3
  timeout = (timeout_milliseconds + 0.0) / 1000
3
4
  finish = Time.now + timeout
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../spec_helper'
2
4
  require 'message_bus/http_client'
3
5
 
@@ -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,4 @@
1
+ # frozen_string_literal: true
1
2
  require_relative '../../../spec_helper'
2
3
  asset_directory = File.expand_path('../../../../../assets', __FILE__)
3
4
  asset_file_paths = Dir.glob(File.join(asset_directory, 'message-bus.js'))
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../spec_helper'
2
4
  require 'message_bus'
3
5
 
@@ -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
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../spec_helper'
2
4
  require 'message_bus'
3
5
 
@@ -6,7 +8,7 @@ class FakeAsync
6
8
 
7
9
  def <<(val)
8
10
  sleep 0.01 # simulate IO
9
- @sent ||= ""
11
+ @sent ||= +""
10
12
  @sent << val
11
13
  end
12
14
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../spec_helper'
2
4
  require 'minitest/hooks/default'
3
5
  require 'message_bus'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../spec_helper'
2
4
  require 'message_bus'
3
5
 
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # coding: utf-8
2
3
 
3
4
  require_relative '../../../spec_helper'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../../spec_helper'
2
4
  require 'message_bus/timer_thread'
3
5
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative '../spec_helper'
2
4
  require 'message_bus'
3
5
  require 'redis'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  $LOAD_PATH << File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
4
  require 'logger'
3
5
  require 'benchmark'
@@ -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/spec'
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.3
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: 2019-10-18 00:00:00.000000000 Z
11
+ date: 2020-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack