message_bus 3.3.0 → 3.3.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d4103e822baabb87e382a7c3c960605fa31d737fd89ed2b2f2036a9983fbf8fc
4
- data.tar.gz: d3f83ce786dd1a06b495a3773041145bea990869462238d46e723c4f9e82a0e7
3
+ metadata.gz: f34126c192c671b895e7cf912a04ffcb5d05a5a5447786c3f5e3db3595c79004
4
+ data.tar.gz: 5a638bf3eb07680d17d93b762bc41d92d8b4c4412d9f3fae3e7410ec2ae67488
5
5
  SHA512:
6
- metadata.gz: f2623043461d284141e727cd28c20750d544ac6edc047c2332f1f306bceb6afc79f154261d4f94085cc6f18396274c2d9ec8fc662cb6185c54e7220675f352c2
7
- data.tar.gz: 12b3027295123f1c17468ef56920c19f57aeec82bc9ffb75bb0054fb8a426560c52f552b5150f02cab02ae3979a3161777bd2ae42d023aee53e1a2b37d41f772
6
+ metadata.gz: f7102c7e62cc9854237fab235e2020f318bbdc956ba64f6d0c77c515430df1169bb06e01a9125f71631546daa3dfa1179c971ca207f32a9cda96880b0d9be6c6
7
+ data.tar.gz: 91b8e655e1dc27b4f386477d38dea8ef4f44daa658793a2205392135cb2f846a80ac0aca52fc04c9a471990b64cb18c6ea9dbd36818690c28cac0c80f922d8be
@@ -0,0 +1,54 @@
1
+ name: Message Bus Tests
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - master
8
+
9
+ env:
10
+ PGHOST: localhost
11
+ PGPORT: 5432
12
+ PGPASSWORD: postgres
13
+ PGUSER: postgres
14
+
15
+ jobs:
16
+ build:
17
+ runs-on: ubuntu-latest
18
+ name: Ruby ${{ matrix.ruby }}
19
+ services:
20
+ postgres:
21
+ image: postgres:9.4
22
+ env:
23
+ POSTGRES_PASSWORD: postgres
24
+ ports:
25
+ - 5432:5432
26
+ options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5
27
+ strategy:
28
+ matrix:
29
+ ruby: ["2.7", "2.6", "2.5"]
30
+ steps:
31
+ - uses: actions/checkout@v2
32
+ - uses: actions/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ - name: Bundler cache
36
+ uses: actions/cache@v2
37
+ with:
38
+ path: vendor/bundle
39
+ key: ${{ runner.os }}-${{ matrix.ruby }}-gems-${{ hashFiles('**/Gemfile.lock') }}
40
+ restore-keys: |
41
+ ${{ runner.os }}-${{ matrix.ruby }}-gems-
42
+ - name: Create Database
43
+ run: |
44
+ createdb message_bus_test
45
+ - name: Setup redis
46
+ uses: shogo82148/actions-setup-redis@v1
47
+ with:
48
+ redis-version: '5.x'
49
+ - name: Setup gems
50
+ run: |
51
+ bundle config path vendor/bundle
52
+ bundle install --jobs 4
53
+ - name: Tests
54
+ run: bundle exec rake
data/.rubocop.yml CHANGED
@@ -1,6 +1,8 @@
1
1
  inherit_gem:
2
2
  rubocop-discourse: .rubocop.yml
3
-
3
+ inherit_mode:
4
+ merge:
5
+ - Exclude
4
6
  AllCops:
5
7
  Exclude:
6
8
  - 'examples/**/*'
data/CHANGELOG CHANGED
@@ -1,4 +1,52 @@
1
- - Unreleased
1
+ 28-04-2021
2
+
3
+ - Version 3.3.5
4
+
5
+ - PERF: Optimised CORS preflight handling
6
+ - FEATURE: Enable CORS preflight caching
7
+ - FEATURE: Removed trailing cache buster from message bus polls
8
+ - PERF: Improved delay poll timeout for cases where a tab moves in and out of the background
9
+
10
+ 02-10-2020
11
+
12
+ - Version 3.3.4
13
+
14
+ - FIX: Remove trailing comma incorrectly added in ec60d8865.
15
+
16
+ 18-09-2020
17
+
18
+ - Version 3.3.3
19
+
20
+ - FIX: `queue_in_memory` option not being passed to the backends.
21
+ - FIX: `MessageBus::DistributedCache#publish` should raise on error.
22
+
23
+ On the redis backend, any errors encountered during `MessageBus#publish`
24
+ will add the message into an in memory queue and silently swallow the
25
+ error. While this is behavior is OK for normal message_bus usage, it may
26
+ lead to inconsistency when using `DistributedCache`. If a process
27
+ doesn't publish successfully to another process, it will still update
28
+ its in memory cache leaving the other processes unaware. As such, the
29
+ distributed cache is out of sync and will require another successful
30
+ write to the cache to resync all the caches.
31
+
32
+ 15-09-2020
33
+
34
+ - Version 3.3.2
35
+
36
+ - FIX: In the JavaScript client throw when when lastId is given but is not a number.
37
+ - FEATURE: raise when attempting to publish to invalid targets
38
+ - Log when DistributedCache encounters an error when publishing.
39
+
40
+ 09-06-2020
41
+
42
+ - Version 3.3.1
43
+
44
+ - FIX: Disconnect Redis conn when rescuing errors in global subscribe.
45
+ - FIX: `MessageBus::Backends::Redis#global_subscribe` not closing Redis connections.
46
+
47
+ 15-05-2020
48
+
49
+ - Version 3.3.0
2
50
 
3
51
  - FEATURE: `MessageBus.base_route=` to alter the route that message bus will listen on.
4
52
 
data/DEV.md ADDED
@@ -0,0 +1,9 @@
1
+ ### How to Publish to NPM
2
+
3
+ 1. First, edit `package.json` and bump the version.
4
+
5
+ 2. Log in to npm `yarn login`
6
+
7
+ 3. Publish: `yarn publish`
8
+
9
+
data/README.md CHANGED
@@ -10,12 +10,6 @@ MessageBus is implemented as Rack middleware and can be used by any Rails / Sina
10
10
 
11
11
  Read the generated docs: <https://www.rubydoc.info/gems/message_bus>
12
12
 
13
- ## Try it out!
14
-
15
- Live chat demo per [examples/chat](https://github.com/SamSaffron/message_bus/tree/master/examples/chat) is at:
16
-
17
- ### http://chat.samsaffron.com
18
-
19
13
  ## Ruby version support
20
14
 
21
15
  MessageBus only support officially supported versions of Ruby; as of [2018-06-20](https://www.ruby-lang.org/en/news/2018/06/20/support-of-ruby-2-2-has-ended/) this means we only support Ruby version 2.3 and up.
@@ -304,6 +298,11 @@ MessageBus.subscribe("/channel", function(data){
304
298
  MessageBus.subscribe("/channel", function(data){
305
299
  // data shipped from server
306
300
  }, -3);
301
+
302
+ // you will get the entire backlog
303
+ MessageBus.subscribe("/channel", function(data){
304
+ // data shipped from server
305
+ }, 0);
307
306
  ```
308
307
 
309
308
  #### JavaScript Client settings
data/Rakefile CHANGED
@@ -92,3 +92,7 @@ end
92
92
 
93
93
  desc "Run all tests, link checks and confirms documentation compiles without error"
94
94
  task default: [:spec, :rubocop, :test_doc]
95
+
96
+ Rake::Task['release'].enhance do
97
+ sh "npm publish"
98
+ end
@@ -8,17 +8,11 @@
8
8
  throw new Error("MessageBus must be loaded before the ajax adapter");
9
9
  }
10
10
 
11
- var cacheBuster = Math.random() * 10000 | 0;
12
-
13
11
  global.MessageBus.ajax = function(options){
14
12
  var XHRImpl = (global.MessageBus && global.MessageBus.xhrImplementation) || global.XMLHttpRequest;
15
13
  var xhr = new XHRImpl();
16
14
  xhr.dataType = options.dataType;
17
- var url = options.url;
18
- if (!options.cache){
19
- url += ((-1 == url.indexOf('?')) ? '?' : '&') + '_=' + (cacheBuster++)
20
- }
21
- xhr.open('POST', url);
15
+ xhr.open('POST', options.url);
22
16
  for (var name in options.headers){
23
17
  xhr.setRequestHeader(name, options.headers[name]);
24
18
  }
@@ -31,8 +31,6 @@
31
31
  var started = false;
32
32
  var clientId = uniqueId();
33
33
  var callbacks = [];
34
- var queue = [];
35
- var interval = null;
36
34
  var failCount = 0;
37
35
  var baseUrl = "/";
38
36
  var paused = false;
@@ -103,7 +101,6 @@
103
101
  };
104
102
 
105
103
  var processMessages = function(messages) {
106
- var gotData = false;
107
104
  if ((!messages) || (messages.length === 0)) { return false; }
108
105
 
109
106
  for (var i = 0; i < messages.length; i++) {
@@ -213,24 +210,6 @@
213
210
  }
214
211
  };
215
212
 
216
- var setOnProgressListener = function(xhr) {
217
- var position = 0;
218
- // if it takes longer than 3000 ms to get first chunk, we have some proxy
219
- // this is messing with us, so just backoff from using chunked for now
220
- var chunkedTimeout = setTimeout(disableChunked, 3000);
221
- xhr.onprogress = function() {
222
- clearTimeout(chunkedTimeout);
223
- if (
224
- xhr.getResponseHeader("Content-Type") ===
225
- "application/json; charset=utf-8"
226
- ) {
227
- // not chunked we are sending json back
228
- chunked = false;
229
- return;
230
- }
231
- position = handle_progress(xhr.responseText, position);
232
- };
233
- };
234
213
  if (!me.ajax) {
235
214
  throw new Error("Either jQuery or the ajax adapter must be loaded");
236
215
  }
@@ -246,7 +225,6 @@
246
225
  "/poll" +
247
226
  (!longPoll ? "?dlp=t" : ""),
248
227
  data: data,
249
- cache: false,
250
228
  async: true,
251
229
  dataType: dataType,
252
230
  type: "POST",
@@ -451,7 +429,7 @@
451
429
  me.visibilityEvent = document.addEventListener(
452
430
  "visibilitychange",
453
431
  function() {
454
- if (!document.hidden && !me.longPoll && pollTimeout) {
432
+ if (!document.hidden && !me.longPoll && (pollTimeout || delayPollTimeout)) {
455
433
  clearTimeout(pollTimeout);
456
434
  clearTimeout(delayPollTimeout);
457
435
 
@@ -484,13 +462,16 @@
484
462
  // -1 will subscribe to all new messages
485
463
  // -2 will recieve last message + all new messages
486
464
  // -3 will recieve last 2 messages + all new messages
465
+ // if undefined will default to -1
487
466
  subscribe: function(channel, func, lastId) {
488
467
  if (!started && !stopped) {
489
468
  me.start();
490
469
  }
491
470
 
492
- if (typeof lastId !== "number") {
471
+ if (lastId === null || typeof lastId === "undefined") {
493
472
  lastId = -1;
473
+ } else if (typeof lastId !== "number") {
474
+ throw "lastId has type " + typeof lastId + " but a number was expected.";
494
475
  }
495
476
 
496
477
  if (typeof channel !== "string") {
data/lib/message_bus.rb CHANGED
@@ -20,6 +20,7 @@ end
20
20
  module MessageBus; end
21
21
  MessageBus::BACKENDS = {}
22
22
  class MessageBus::InvalidMessage < StandardError; end
23
+ class MessageBus::InvalidMessageTarget < MessageBus::InvalidMessage; end
23
24
  class MessageBus::BusDestroyed < StandardError; end
24
25
 
25
26
  # The main server-side interface to a message bus for the purposes of
@@ -329,6 +330,7 @@ module MessageBus::Implementation
329
330
  #
330
331
  # @raise [MessageBus::BusDestroyed] if the bus is destroyed
331
332
  # @raise [MessageBus::InvalidMessage] if attempting to put permission restrictions on a globally-published message
333
+ # @raise [MessageBus::InvalidMessageTarget] if attempting to publish to a empty group of users
332
334
  def publish(channel, data, opts = nil)
333
335
  return if @off
334
336
 
@@ -348,7 +350,13 @@ module MessageBus::Implementation
348
350
  site_id = opts[:site_id]
349
351
  end
350
352
 
351
- raise ::MessageBus::InvalidMessage if (user_ids || group_ids) && global?(channel)
353
+ if (user_ids || group_ids) && global?(channel)
354
+ raise ::MessageBus::InvalidMessage
355
+ end
356
+
357
+ if (user_ids == []) || (group_ids == []) || (client_ids == [])
358
+ raise ::MessageBus::InvalidMessageTarget
359
+ end
352
360
 
353
361
  encoded_data = JSON.dump(
354
362
  data: data,
@@ -357,13 +365,17 @@ module MessageBus::Implementation
357
365
  client_ids: client_ids
358
366
  )
359
367
 
360
- channel_opts = nil
368
+ channel_opts = {}
361
369
 
362
- if opts && ((age = opts[:max_backlog_age]) || (size = opts[:max_backlog_size]))
363
- channel_opts = {
364
- max_backlog_size: size,
365
- max_backlog_age: age
366
- }
370
+ if opts
371
+ if ((age = opts[:max_backlog_age]) || (size = opts[:max_backlog_size]))
372
+ channel_opts[:max_backlog_size] = size
373
+ channel_opts[:max_backlog_age] = age
374
+ end
375
+
376
+ if opts.has_key?(:queue_in_memory)
377
+ channel_opts[:queue_in_memory] = opts[:queue_in_memory]
378
+ end
367
379
  end
368
380
 
369
381
  encoded_channel_name = encode_channel_name(channel, site_id)
@@ -251,11 +251,11 @@ LUA
251
251
 
252
252
  # (see Base#global_unsubscribe)
253
253
  def global_unsubscribe
254
- if @redis_global
255
- # new connection to avoid deadlock
256
- new_redis_connection.publish(redis_channel_name, UNSUB_MESSAGE)
257
- @redis_global.disconnect
258
- @redis_global = nil
254
+ begin
255
+ new_redis = new_redis_connection
256
+ new_redis.publish(redis_channel_name, UNSUB_MESSAGE)
257
+ ensure
258
+ new_redis&.disconnect!
259
259
  end
260
260
  end
261
261
 
@@ -278,13 +278,13 @@ LUA
278
278
  end
279
279
 
280
280
  begin
281
- @redis_global = new_redis_connection
281
+ global_redis = new_redis_connection
282
282
 
283
283
  if highest_id
284
284
  clear_backlog.call(&blk)
285
285
  end
286
286
 
287
- @redis_global.subscribe(redis_channel_name) do |on|
287
+ global_redis.subscribe(redis_channel_name) do |on|
288
288
  on.subscribe do
289
289
  if highest_id
290
290
  clear_backlog.call(&blk)
@@ -298,7 +298,7 @@ LUA
298
298
 
299
299
  on.message do |_c, m|
300
300
  if m == UNSUB_MESSAGE
301
- @redis_global.unsubscribe
301
+ global_redis.unsubscribe
302
302
  return
303
303
  end
304
304
  m = MessageBus::Message.decode m
@@ -318,9 +318,12 @@ LUA
318
318
  end
319
319
  end
320
320
  rescue => error
321
- @logger.warn "#{error} subscribe failed, reconnecting in 1 second. Call stack #{error.backtrace}"
321
+ @logger.warn "#{error} subscribe failed, reconnecting in 1 second. Call stack #{error.backtrace.join("\n")}"
322
322
  sleep 1
323
+ global_redis&.disconnect!
323
324
  retry
325
+ ensure
326
+ global_redis&.disconnect!
324
327
  end
325
328
  end
326
329
 
@@ -133,7 +133,6 @@ class MessageBus::Client
133
133
  user_allowed = false
134
134
  group_allowed = false
135
135
 
136
- # this is an inconsistency we should fix anyway, publishing `user_ids: nil` should work same as groups
137
136
  has_users = msg.user_ids && msg.user_ids.length > 0
138
137
  has_groups = msg.group_ids && msg.group_ids.length > 0
139
138
 
@@ -16,11 +16,12 @@ module MessageBus
16
16
 
17
17
  attr_accessor :app_version
18
18
 
19
- def initialize(message_bus = nil)
19
+ def initialize(message_bus = nil, publish_queue_in_memory: true)
20
20
  @subscribers = []
21
21
  @subscribed = false
22
22
  @lock = Mutex.new
23
23
  @message_bus = message_bus || MessageBus
24
+ @publish_queue_in_memory = publish_queue_in_memory
24
25
  end
25
26
 
26
27
  def subscribers
@@ -75,7 +76,11 @@ module MessageBus
75
76
  message[:origin] = hash.identity
76
77
  message[:hash_key] = hash.key
77
78
  message[:app_version] = @app_version if @app_version
78
- @message_bus.publish(CHANNEL_NAME, message, user_ids: [-1])
79
+
80
+ @message_bus.publish(CHANNEL_NAME, message,
81
+ user_ids: [-1],
82
+ queue_in_memory: @publish_queue_in_memory
83
+ )
79
84
  end
80
85
 
81
86
  def set(hash, key, value)
@@ -20,10 +20,10 @@ class MessageBus::Message < Struct.new(:global_id, :message_id, :channel, :data)
20
20
 
21
21
  # only tricky thing to encode is pipes in a channel name ... do a straight replace
22
22
  def encode
23
- global_id.to_s << "|" << message_id.to_s << "|" << channel.gsub("|", "$$123$$") << "|" << data
23
+ "#{global_id}|#{message_id}|#{channel.gsub("|", "$$123$$")}|#{data}"
24
24
  end
25
25
 
26
26
  def encode_without_ids
27
- channel.gsub("|", "$$123$$") << "|" << data
27
+ "#{channel.gsub("|", "$$123$$")}|#{data}"
28
28
  end
29
29
  end
@@ -81,6 +81,22 @@ class MessageBus::Rack::Middleware
81
81
  client_id = env['PATH_INFO'][@base_route_length..-1].split("/")[0]
82
82
  return [404, {}, ["not found"]] unless client_id
83
83
 
84
+ headers = {}
85
+ headers["Cache-Control"] = "must-revalidate, private, max-age=0"
86
+ headers["Content-Type"] = "application/json; charset=utf-8"
87
+ headers["Pragma"] = "no-cache"
88
+ headers["Expires"] = "0"
89
+
90
+ if @bus.extra_response_headers_lookup
91
+ @bus.extra_response_headers_lookup.call(env).each do |k, v|
92
+ headers[k] = v
93
+ end
94
+ end
95
+
96
+ if env["REQUEST_METHOD"] == "OPTIONS"
97
+ return [200, headers, ["OK"]]
98
+ end
99
+
84
100
  user_id = @bus.user_id_lookup.call(env) if @bus.user_id_lookup
85
101
  group_ids = @bus.group_ids_lookup.call(env) if @bus.group_ids_lookup
86
102
  site_id = @bus.site_id_lookup.call(env) if @bus.site_id_lookup
@@ -111,22 +127,6 @@ class MessageBus::Rack::Middleware
111
127
  end
112
128
  end
113
129
 
114
- headers = {}
115
- headers["Cache-Control"] = "must-revalidate, private, max-age=0"
116
- headers["Content-Type"] = "application/json; charset=utf-8"
117
- headers["Pragma"] = "no-cache"
118
- headers["Expires"] = "0"
119
-
120
- if @bus.extra_response_headers_lookup
121
- @bus.extra_response_headers_lookup.call(env).each do |k, v|
122
- headers[k] = v
123
- end
124
- end
125
-
126
- if env["REQUEST_METHOD"] == "OPTIONS"
127
- return [200, headers, ["OK"]]
128
- end
129
-
130
130
  long_polling = @bus.long_polling_enabled? &&
131
131
  env['QUERY_STRING'] !~ /dlp=t/ &&
132
132
  @connection_manager.client_count < @bus.max_active_clients
@@ -45,7 +45,14 @@ class MessageBus::TimerThread
45
45
  while running
46
46
  @mutex.synchronize do
47
47
  running = @thread && @thread.alive?
48
- @thread.wakeup if running
48
+
49
+ if running
50
+ begin
51
+ @thread.wakeup
52
+ rescue ThreadError
53
+ raise if @thread.alive?
54
+ end
55
+ end
49
56
  end
50
57
  sleep 0
51
58
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MessageBus
4
- VERSION = "3.3.0"
4
+ VERSION = "3.3.5"
5
5
  end
data/message_bus.gemspec CHANGED
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.name = "message_bus"
18
18
  gem.require_paths = ["lib"]
19
19
  gem.version = MessageBus::VERSION
20
- gem.required_ruby_version = ">= 2.3.0"
20
+ gem.required_ruby_version = ">= 2.4.0"
21
21
  gem.add_runtime_dependency 'rack', '>= 1.1.3'
22
22
  gem.add_development_dependency 'redis'
23
23
  gem.add_development_dependency 'pg'
data/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "message-bus-client",
3
- "version": "3.3.0",
3
+ "version": "3.3.5",
4
4
  "description": "A message bus client in Javascript",
5
5
  "main": "assets/message-bus.js",
6
6
  "keywords": "es6, modules",
@@ -201,6 +201,13 @@ describe MessageBus do
201
201
  @bus.backlog("/chuck").map { |i| i.data }.to_a.must_equal ['norris', 'foo']
202
202
  end
203
203
 
204
+ it "should correctly restrict the backlog size of a channel" do
205
+ @bus.publish("/chuck", "norris")
206
+ @bus.publish("/chuck", "foo", max_backlog_size: 1)
207
+
208
+ @bus.backlog("/chuck").map { |i| i.data }.to_a.must_equal ['foo']
209
+ end
210
+
204
211
  it "allows you to look up last_message" do
205
212
  @bus.publish("/bob", "dylan")
206
213
  @bus.publish("/bob", "marley")
@@ -266,15 +273,37 @@ describe MessageBus do
266
273
  end
267
274
 
268
275
  it "should exception if publishing restricted messages to user" do
269
- lambda do
276
+ assert_raises(MessageBus::InvalidMessage) do
270
277
  @bus.publish("/global/test", "test", user_ids: [1])
271
- end.must_raise(MessageBus::InvalidMessage)
278
+ end
272
279
  end
273
280
 
274
281
  it "should exception if publishing restricted messages to group" do
275
- lambda do
282
+ assert_raises(MessageBus::InvalidMessage) do
276
283
  @bus.publish("/global/test", "test", user_ids: [1])
277
- end.must_raise(MessageBus::InvalidMessage)
284
+ end
285
+ end
286
+
287
+ it "should raise if we publish to an empty group or user list" do
288
+ assert_raises(MessageBus::InvalidMessageTarget) do
289
+ @bus.publish "/foo", "bar", user_ids: []
290
+ end
291
+
292
+ assert_raises(MessageBus::InvalidMessageTarget) do
293
+ @bus.publish "/foo", "bar", group_ids: []
294
+ end
295
+
296
+ assert_raises(MessageBus::InvalidMessageTarget) do
297
+ @bus.publish "/foo", "bar", client_ids: []
298
+ end
299
+
300
+ assert_raises(MessageBus::InvalidMessageTarget) do
301
+ @bus.publish "/foo", "bar", group_ids: [], user_ids: [1]
302
+ end
303
+
304
+ assert_raises(MessageBus::InvalidMessageTarget) do
305
+ @bus.publish "/foo", "bar", group_ids: [1], user_ids: []
306
+ end
278
307
  end
279
308
  end
280
309
 
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: 3.3.0
4
+ version: 3.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-27 00:00:00.000000000 Z
11
+ date: 2021-04-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -59,10 +59,11 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - ".github/workflows/ci.yml"
62
63
  - ".gitignore"
63
64
  - ".rubocop.yml"
64
- - ".travis.yml"
65
65
  - CHANGELOG
66
+ - DEV.md
66
67
  - Dockerfile
67
68
  - Gemfile
68
69
  - Guardfile
@@ -141,7 +142,7 @@ homepage: https://github.com/SamSaffron/message_bus
141
142
  licenses:
142
143
  - MIT
143
144
  metadata: {}
144
- post_install_message:
145
+ post_install_message:
145
146
  rdoc_options: []
146
147
  require_paths:
147
148
  - lib
@@ -149,15 +150,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
149
150
  requirements:
150
151
  - - ">="
151
152
  - !ruby/object:Gem::Version
152
- version: 2.3.0
153
+ version: 2.4.0
153
154
  required_rubygems_version: !ruby/object:Gem::Requirement
154
155
  requirements:
155
156
  - - ">="
156
157
  - !ruby/object:Gem::Version
157
158
  version: '0'
158
159
  requirements: []
159
- rubygems_version: 3.0.3
160
- signing_key:
160
+ rubygems_version: 3.2.2
161
+ signing_key:
161
162
  specification_version: 4
162
163
  summary: ''
163
164
  test_files:
data/.travis.yml DELETED
@@ -1,17 +0,0 @@
1
- before_install: gem install bundler
2
- language: ruby
3
- rvm:
4
- - 2.4
5
- - 2.5
6
- - 2.6
7
- gemfile:
8
- - Gemfile
9
- addons:
10
- postgresql: "9.4"
11
- env:
12
- - PGUSER=postgres
13
- before_script:
14
- - psql -c 'create database message_bus_test;' -U postgres
15
- services:
16
- - redis-server
17
- - postgresql