actioncable 6.1.4.7 → 6.1.5
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|