message_bus 3.3.1 → 3.3.2

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: 659722c1ea3a6a805dbe81099ee2848a11ab7ebffaf8612d119f5062fd740337
4
- data.tar.gz: 4b187421f5fb4bdff177d117b059c05314305729885f5ec520127ad827db5369
3
+ metadata.gz: 89229a2e20ef4e018c1e483fc24784fca853901f589fc25eabaca7cefa88d195
4
+ data.tar.gz: 36ec7e44a6223a60f4e51a937977ba74122e8ac36c8e5df9551beb5b0a3d679d
5
5
  SHA512:
6
- metadata.gz: c345409c8c9c1624b079d28ca166b962f9d64bd79159fc085055df8cb760545372732fd5cf509061b55eb0a427e8ffd7018238a7b49c44f27f4e942d575f0504
7
- data.tar.gz: d92fb533dea19da315c210f7ac96a1029cf2d1709fee3dd919032f221b557cff9ebb3d2556285e5e0c6018ebc4b227ed178fd8658711c5a9ffacf19aeb47edff
6
+ metadata.gz: f8847a0e7fd1f836000bda6ef017c498697489f84cf437732feab601b2a9c924aa981f4e96457360e36647568a00246e728459918a91afbda1e7b86e757f6520
7
+ data.tar.gz: 9217b0226498fca5fd7dc4159d72b5c86d0f588dff13cf1ddf8e3b8ce4d5f04fcb42f03cb4310233100603391f90ac6d1a8b1ee0a1cf4281ab2e1275799f7907
data/CHANGELOG CHANGED
@@ -1,3 +1,13 @@
1
+ - Unrelease
2
+
3
+ 15-09-2020
4
+
5
+ - Version 3.3.2
6
+
7
+ - FIX: In the JavaScript client throw when when lastId is given but is not a number.
8
+ - FEATURE: raise when attempting to publish to invalid targets
9
+ - Log when DistributedCache encounters an error when publishing.
10
+
1
11
  09-06-2020
2
12
 
3
13
  - Version 3.3.1
data/README.md CHANGED
@@ -304,6 +304,11 @@ MessageBus.subscribe("/channel", function(data){
304
304
  MessageBus.subscribe("/channel", function(data){
305
305
  // data shipped from server
306
306
  }, -3);
307
+
308
+ // you will get the entire backlog
309
+ MessageBus.subscribe("/channel", function(data){
310
+ // data shipped from server
311
+ }, 0);
307
312
  ```
308
313
 
309
314
  #### JavaScript Client settings
@@ -484,13 +484,16 @@
484
484
  // -1 will subscribe to all new messages
485
485
  // -2 will recieve last message + all new messages
486
486
  // -3 will recieve last 2 messages + all new messages
487
+ // if undefined will default to -1
487
488
  subscribe: function(channel, func, lastId) {
488
489
  if (!started && !stopped) {
489
490
  me.start();
490
491
  }
491
492
 
492
- if (typeof lastId !== "number") {
493
+ if (lastId === null || typeof lastId === "undefined") {
493
494
  lastId = -1;
495
+ } else if (typeof lastId !== "number") {
496
+ throw "lastId has type " + typeof lastId + " but a number was expected.";
494
497
  }
495
498
 
496
499
  if (typeof channel !== "string") {
@@ -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,
@@ -318,7 +318,7 @@ 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
323
  global_redis&.disconnect!
324
324
  retry
@@ -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
 
@@ -75,7 +75,13 @@ module MessageBus
75
75
  message[:origin] = hash.identity
76
76
  message[:hash_key] = hash.key
77
77
  message[:app_version] = @app_version if @app_version
78
- @message_bus.publish(CHANNEL_NAME, message, user_ids: [-1])
78
+
79
+ begin
80
+ @message_bus.publish(CHANNEL_NAME, message, user_ids: [-1])
81
+ rescue => e
82
+ @message_bus.logger.warn("DistributedCache failed to publish: #{e.message}\n#{e.backtrace.join("\n")}")
83
+ raise
84
+ end
79
85
  end
80
86
 
81
87
  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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MessageBus
4
- VERSION = "3.3.1"
4
+ VERSION = "3.3.2"
5
5
  end
@@ -266,15 +266,37 @@ describe MessageBus do
266
266
  end
267
267
 
268
268
  it "should exception if publishing restricted messages to user" do
269
- lambda do
269
+ assert_raises(MessageBus::InvalidMessage) do
270
270
  @bus.publish("/global/test", "test", user_ids: [1])
271
- end.must_raise(MessageBus::InvalidMessage)
271
+ end
272
272
  end
273
273
 
274
274
  it "should exception if publishing restricted messages to group" do
275
- lambda do
275
+ assert_raises(MessageBus::InvalidMessage) do
276
276
  @bus.publish("/global/test", "test", user_ids: [1])
277
- end.must_raise(MessageBus::InvalidMessage)
277
+ end
278
+ end
279
+
280
+ it "should raise if we publish to an empty group or user list" do
281
+ assert_raises(MessageBus::InvalidMessageTarget) do
282
+ @bus.publish "/foo", "bar", user_ids: []
283
+ end
284
+
285
+ assert_raises(MessageBus::InvalidMessageTarget) do
286
+ @bus.publish "/foo", "bar", group_ids: []
287
+ end
288
+
289
+ assert_raises(MessageBus::InvalidMessageTarget) do
290
+ @bus.publish "/foo", "bar", client_ids: []
291
+ end
292
+
293
+ assert_raises(MessageBus::InvalidMessageTarget) do
294
+ @bus.publish "/foo", "bar", group_ids: [], user_ids: [1]
295
+ end
296
+
297
+ assert_raises(MessageBus::InvalidMessageTarget) do
298
+ @bus.publish "/foo", "bar", group_ids: [1], user_ids: []
299
+ end
278
300
  end
279
301
  end
280
302
 
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.1
4
+ version: 3.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-09 00:00:00.000000000 Z
11
+ date: 2020-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack