actioncable 6.1.4.7 → 6.1.5
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 +4 -4
- data/CHANGELOG.md +18 -0
- data/MIT-LICENSE +1 -1
- data/app/assets/javascripts/action_cable.js +59 -2
- data/lib/action_cable/gem_version.rb +2 -2
- data/lib/action_cable/server/broadcasting.rb +1 -1
- data/lib/action_cable.rb +1 -1
- metadata +14 -13
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: f05b8e42e5c0e16cd0ad063f88977f57aea0db19c1b218eeb9ae7a692dd0ca90
|
|
4
|
+
data.tar.gz: e08f6031d387fe50556814c79f5b3192ad7f399bd628184f938e02cd03a92039
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 18e6ae12a5c20473486763269dc7289f49a27bf1d6b4dfbb5cfabd1eb45dc72a2774cf8b46e028868c119668544778b4a339f3d4ac236ff73836fa6bfe22bb1d
|
|
7
|
+
data.tar.gz: a7f6e6ef179b3b375dc37c4a4c13c552281d5364acab5585705072f9b3a22de5aff9ee32d3f0a2c1fe5258b5f1d03b0cef808c096139656f358d629ae7284677
|
data/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## Rails 6.1.5 (March 09, 2022) ##
|
|
2
|
+
|
|
3
|
+
* The Action Cable client now ensures successful channel subscriptions:
|
|
4
|
+
|
|
5
|
+
* The client maintains a set of pending subscriptions until either
|
|
6
|
+
the server confirms the subscription or the channel is torn down.
|
|
7
|
+
* Rectifies the race condition where an unsubscribe is rapidly followed
|
|
8
|
+
by a subscribe (on the same channel identifier) and the requests are
|
|
9
|
+
handled out of order by the ActionCable server, thereby ignoring the
|
|
10
|
+
subscribe command.
|
|
11
|
+
|
|
12
|
+
*Daniel Spinosa*
|
|
13
|
+
|
|
14
|
+
* Truncate broadcast logging messages.
|
|
15
|
+
|
|
16
|
+
*J Smith*
|
|
17
|
+
|
|
18
|
+
|
|
1
19
|
## Rails 6.1.4.7 (March 08, 2022) ##
|
|
2
20
|
|
|
3
21
|
* No changes.
|
data/MIT-LICENSE
CHANGED
|
@@ -291,6 +291,7 @@
|
|
|
291
291
|
return this.monitor.recordPing();
|
|
292
292
|
|
|
293
293
|
case message_types.confirmation:
|
|
294
|
+
this.subscriptions.confirmSubscription(identifier);
|
|
294
295
|
return this.subscriptions.notify(identifier, "connected");
|
|
295
296
|
|
|
296
297
|
case message_types.rejection:
|
|
@@ -360,10 +361,52 @@
|
|
|
360
361
|
};
|
|
361
362
|
return Subscription;
|
|
362
363
|
}();
|
|
364
|
+
var SubscriptionGuarantor = function() {
|
|
365
|
+
function SubscriptionGuarantor(subscriptions) {
|
|
366
|
+
classCallCheck(this, SubscriptionGuarantor);
|
|
367
|
+
this.subscriptions = subscriptions;
|
|
368
|
+
this.pendingSubscriptions = [];
|
|
369
|
+
}
|
|
370
|
+
SubscriptionGuarantor.prototype.guarantee = function guarantee(subscription) {
|
|
371
|
+
if (this.pendingSubscriptions.indexOf(subscription) == -1) {
|
|
372
|
+
logger.log("SubscriptionGuarantor guaranteeing " + subscription.identifier);
|
|
373
|
+
this.pendingSubscriptions.push(subscription);
|
|
374
|
+
} else {
|
|
375
|
+
logger.log("SubscriptionGuarantor already guaranteeing " + subscription.identifier);
|
|
376
|
+
}
|
|
377
|
+
this.startGuaranteeing();
|
|
378
|
+
};
|
|
379
|
+
SubscriptionGuarantor.prototype.forget = function forget(subscription) {
|
|
380
|
+
logger.log("SubscriptionGuarantor forgetting " + subscription.identifier);
|
|
381
|
+
this.pendingSubscriptions = this.pendingSubscriptions.filter(function(s) {
|
|
382
|
+
return s !== subscription;
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
SubscriptionGuarantor.prototype.startGuaranteeing = function startGuaranteeing() {
|
|
386
|
+
this.stopGuaranteeing();
|
|
387
|
+
this.retrySubscribing();
|
|
388
|
+
};
|
|
389
|
+
SubscriptionGuarantor.prototype.stopGuaranteeing = function stopGuaranteeing() {
|
|
390
|
+
clearTimeout(this.retryTimeout);
|
|
391
|
+
};
|
|
392
|
+
SubscriptionGuarantor.prototype.retrySubscribing = function retrySubscribing() {
|
|
393
|
+
var _this = this;
|
|
394
|
+
this.retryTimeout = setTimeout(function() {
|
|
395
|
+
if (_this.subscriptions && typeof _this.subscriptions.subscribe === "function") {
|
|
396
|
+
_this.pendingSubscriptions.map(function(subscription) {
|
|
397
|
+
logger.log("SubscriptionGuarantor resubscribing " + subscription.identifier);
|
|
398
|
+
_this.subscriptions.subscribe(subscription);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
}, 500);
|
|
402
|
+
};
|
|
403
|
+
return SubscriptionGuarantor;
|
|
404
|
+
}();
|
|
363
405
|
var Subscriptions = function() {
|
|
364
406
|
function Subscriptions(consumer) {
|
|
365
407
|
classCallCheck(this, Subscriptions);
|
|
366
408
|
this.consumer = consumer;
|
|
409
|
+
this.guarantor = new SubscriptionGuarantor(this);
|
|
367
410
|
this.subscriptions = [];
|
|
368
411
|
}
|
|
369
412
|
Subscriptions.prototype.create = function create(channelName, mixin) {
|
|
@@ -378,7 +421,7 @@
|
|
|
378
421
|
this.subscriptions.push(subscription);
|
|
379
422
|
this.consumer.ensureActiveConnection();
|
|
380
423
|
this.notify(subscription, "initialized");
|
|
381
|
-
this.
|
|
424
|
+
this.subscribe(subscription);
|
|
382
425
|
return subscription;
|
|
383
426
|
};
|
|
384
427
|
Subscriptions.prototype.remove = function remove(subscription) {
|
|
@@ -397,6 +440,7 @@
|
|
|
397
440
|
});
|
|
398
441
|
};
|
|
399
442
|
Subscriptions.prototype.forget = function forget(subscription) {
|
|
443
|
+
this.guarantor.forget(subscription);
|
|
400
444
|
this.subscriptions = this.subscriptions.filter(function(s) {
|
|
401
445
|
return s !== subscription;
|
|
402
446
|
});
|
|
@@ -410,7 +454,7 @@
|
|
|
410
454
|
Subscriptions.prototype.reload = function reload() {
|
|
411
455
|
var _this2 = this;
|
|
412
456
|
return this.subscriptions.map(function(subscription) {
|
|
413
|
-
return _this2.
|
|
457
|
+
return _this2.subscribe(subscription);
|
|
414
458
|
});
|
|
415
459
|
};
|
|
416
460
|
Subscriptions.prototype.notifyAll = function notifyAll(callbackName) {
|
|
@@ -436,6 +480,18 @@
|
|
|
436
480
|
return typeof subscription[callbackName] === "function" ? subscription[callbackName].apply(subscription, args) : undefined;
|
|
437
481
|
});
|
|
438
482
|
};
|
|
483
|
+
Subscriptions.prototype.subscribe = function subscribe(subscription) {
|
|
484
|
+
if (this.sendCommand(subscription, "subscribe")) {
|
|
485
|
+
this.guarantor.guarantee(subscription);
|
|
486
|
+
}
|
|
487
|
+
};
|
|
488
|
+
Subscriptions.prototype.confirmSubscription = function confirmSubscription(identifier) {
|
|
489
|
+
var _this4 = this;
|
|
490
|
+
logger.log("Subscription confirmed " + identifier);
|
|
491
|
+
this.findAll(identifier).map(function(subscription) {
|
|
492
|
+
return _this4.guarantor.forget(subscription);
|
|
493
|
+
});
|
|
494
|
+
};
|
|
439
495
|
Subscriptions.prototype.sendCommand = function sendCommand(subscription, command) {
|
|
440
496
|
var identifier = subscription.identifier;
|
|
441
497
|
return this.consumer.send({
|
|
@@ -506,6 +562,7 @@
|
|
|
506
562
|
exports.INTERNAL = INTERNAL;
|
|
507
563
|
exports.Subscription = Subscription;
|
|
508
564
|
exports.Subscriptions = Subscriptions;
|
|
565
|
+
exports.SubscriptionGuarantor = SubscriptionGuarantor;
|
|
509
566
|
exports.adapters = adapters;
|
|
510
567
|
exports.createWebSocketURL = createWebSocketURL;
|
|
511
568
|
exports.logger = logger;
|
|
@@ -40,7 +40,7 @@ module ActionCable
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def broadcast(message)
|
|
43
|
-
server.logger.debug { "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}" }
|
|
43
|
+
server.logger.debug { "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect.truncate(300)}" }
|
|
44
44
|
|
|
45
45
|
payload = { broadcasting: broadcasting, message: message, coder: coder }
|
|
46
46
|
ActiveSupport::Notifications.instrument("broadcast.action_cable", payload) do
|
data/lib/action_cable.rb
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
#--
|
|
4
|
-
# Copyright (c) 2015-
|
|
4
|
+
# Copyright (c) 2015-2022 Basecamp, LLC
|
|
5
5
|
#
|
|
6
6
|
# Permission is hereby granted, free of charge, to any person obtaining
|
|
7
7
|
# a copy of this software and associated documentation files (the
|
metadata
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: actioncable
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 6.1.
|
|
4
|
+
version: 6.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Pratik Naik
|
|
8
8
|
- David Heinemeier Hansson
|
|
9
|
-
autorequire:
|
|
9
|
+
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2022-03-
|
|
12
|
+
date: 2022-03-10 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activesupport
|
|
@@ -17,28 +17,28 @@ dependencies:
|
|
|
17
17
|
requirements:
|
|
18
18
|
- - '='
|
|
19
19
|
- !ruby/object:Gem::Version
|
|
20
|
-
version: 6.1.
|
|
20
|
+
version: 6.1.5
|
|
21
21
|
type: :runtime
|
|
22
22
|
prerelease: false
|
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
|
24
24
|
requirements:
|
|
25
25
|
- - '='
|
|
26
26
|
- !ruby/object:Gem::Version
|
|
27
|
-
version: 6.1.
|
|
27
|
+
version: 6.1.5
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: actionpack
|
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
|
31
31
|
requirements:
|
|
32
32
|
- - '='
|
|
33
33
|
- !ruby/object:Gem::Version
|
|
34
|
-
version: 6.1.
|
|
34
|
+
version: 6.1.5
|
|
35
35
|
type: :runtime
|
|
36
36
|
prerelease: false
|
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
|
38
38
|
requirements:
|
|
39
39
|
- - '='
|
|
40
40
|
- !ruby/object:Gem::Version
|
|
41
|
-
version: 6.1.
|
|
41
|
+
version: 6.1.5
|
|
42
42
|
- !ruby/object:Gem::Dependency
|
|
43
43
|
name: nio4r
|
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -140,11 +140,12 @@ licenses:
|
|
|
140
140
|
- MIT
|
|
141
141
|
metadata:
|
|
142
142
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
|
143
|
-
changelog_uri: https://github.com/rails/rails/blob/v6.1.
|
|
144
|
-
documentation_uri: https://api.rubyonrails.org/v6.1.
|
|
143
|
+
changelog_uri: https://github.com/rails/rails/blob/v6.1.5/actioncable/CHANGELOG.md
|
|
144
|
+
documentation_uri: https://api.rubyonrails.org/v6.1.5/
|
|
145
145
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
|
146
|
-
source_code_uri: https://github.com/rails/rails/tree/v6.1.
|
|
147
|
-
|
|
146
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.1.5/actioncable
|
|
147
|
+
rubygems_mfa_required: 'true'
|
|
148
|
+
post_install_message:
|
|
148
149
|
rdoc_options: []
|
|
149
150
|
require_paths:
|
|
150
151
|
- lib
|
|
@@ -159,8 +160,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
159
160
|
- !ruby/object:Gem::Version
|
|
160
161
|
version: '0'
|
|
161
162
|
requirements: []
|
|
162
|
-
rubygems_version: 3.
|
|
163
|
-
signing_key:
|
|
163
|
+
rubygems_version: 3.3.7
|
|
164
|
+
signing_key:
|
|
164
165
|
specification_version: 4
|
|
165
166
|
summary: WebSocket framework for Rails.
|
|
166
167
|
test_files: []
|