actioncable 7.0.2.3 → 7.0.4
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 +30 -0
- data/app/assets/javascripts/action_cable.js +1 -1
- data/app/assets/javascripts/actioncable.esm.js +1 -1
- data/app/assets/javascripts/actioncable.js +1 -1
- data/lib/action_cable/channel/base.rb +1 -1
- data/lib/action_cable/channel/naming.rb +1 -1
- data/lib/action_cable/connection/tagged_logger_proxy.rb +1 -1
- data/lib/action_cable/connection/test_case.rb +1 -1
- data/lib/action_cable/engine.rb +1 -1
- data/lib/action_cable/gem_version.rb +3 -3
- data/lib/action_cable/subscription_adapter/redis.rb +45 -18
- data/lib/action_cable/subscription_adapter/test.rb +1 -1
- data/lib/action_cable/version.rb +1 -1
- metadata +10 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 51532672c5293e1ac4ffdf854f4ee41de231ef843e6ddbc51a20fdede0e029e5
|
4
|
+
data.tar.gz: f5324ae765aa6bcdc65590be2f2ad0c034e9b1a58d318a4f27e9e9f7e6ffd3c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6084037b957593e0e31cdf7c55030f9f2921d03a93b01f0bdb54f2460936909667350edba98b10e287a3563bd39231606abf1f575f45ee47b603d748ef48a072
|
7
|
+
data.tar.gz: c2457611b9b2694955a9613fc27211e34e4d7b4b0d98b084eca9e1b0052f6ccbbfdacd0133d6b0da2eb1bed895c7a18bfe32ae5dfac167c4725bb8b45dcd6bf9
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,33 @@
|
|
1
|
+
## Rails 7.0.4 (September 09, 2022) ##
|
2
|
+
|
3
|
+
* The Redis adapter is now compatible with redis-rb 5.0
|
4
|
+
|
5
|
+
Compatibility with redis-rb 3.x was dropped.
|
6
|
+
|
7
|
+
*Jean Boussier*
|
8
|
+
|
9
|
+
* The Action Cable server is now mounted with `anchor: true`.
|
10
|
+
|
11
|
+
This means that routes that also start with `/cable` will no longer clash with Action Cable.
|
12
|
+
|
13
|
+
*Alex Ghiculescu*
|
14
|
+
|
15
|
+
|
16
|
+
## Rails 7.0.3.1 (July 12, 2022) ##
|
17
|
+
|
18
|
+
* No changes.
|
19
|
+
|
20
|
+
|
21
|
+
## Rails 7.0.3 (May 09, 2022) ##
|
22
|
+
|
23
|
+
* No changes.
|
24
|
+
|
25
|
+
|
26
|
+
## Rails 7.0.2.4 (April 26, 2022) ##
|
27
|
+
|
28
|
+
* No changes.
|
29
|
+
|
30
|
+
|
1
31
|
## Rails 7.0.2.3 (March 08, 2022) ##
|
2
32
|
|
3
33
|
* No changes.
|
@@ -186,7 +186,7 @@ module ActionCable
|
|
186
186
|
end
|
187
187
|
|
188
188
|
# Called by the cable connection when it's cut, so the channel has a chance to cleanup with callbacks.
|
189
|
-
# This method is not intended to be called directly by the user. Instead,
|
189
|
+
# This method is not intended to be called directly by the user. Instead, override the #unsubscribed callback.
|
190
190
|
def unsubscribe_from_channel # :nodoc:
|
191
191
|
run_callbacks :unsubscribe do
|
192
192
|
unsubscribed
|
@@ -3,7 +3,7 @@
|
|
3
3
|
module ActionCable
|
4
4
|
module Connection
|
5
5
|
# Allows the use of per-connection tags against the server logger. This wouldn't work using the traditional
|
6
|
-
#
|
6
|
+
# ActiveSupport::TaggedLogging enhanced Rails.logger, as that logger will reset the tags between requests.
|
7
7
|
# The connection is long-lived, so it needs its own set of tags for its independent duration.
|
8
8
|
class TaggedLoggerProxy
|
9
9
|
attr_reader :tags
|
@@ -86,7 +86,7 @@ module ActionCable
|
|
86
86
|
# end
|
87
87
|
#
|
88
88
|
# +connect+ accepts additional information about the HTTP request with the
|
89
|
-
# +params+, +headers+, +session
|
89
|
+
# +params+, +headers+, +session+, and Rack +env+ options.
|
90
90
|
#
|
91
91
|
# def test_connect_with_headers_and_query_string
|
92
92
|
# connect params: { user_id: 1 }, headers: { "X-API-TOKEN" => "secret-my" }
|
data/lib/action_cable/engine.rb
CHANGED
@@ -54,7 +54,7 @@ module ActionCable
|
|
54
54
|
config = app.config
|
55
55
|
unless config.action_cable.mount_path.nil?
|
56
56
|
app.routes.prepend do
|
57
|
-
mount ActionCable.server => config.action_cable.mount_path, internal: true
|
57
|
+
mount ActionCable.server => config.action_cable.mount_path, internal: true, anchor: true
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module ActionCable
|
4
|
-
# Returns the version of
|
4
|
+
# Returns the currently loaded version of Action Cable as a <tt>Gem::Version</tt>.
|
5
5
|
def self.gem_version
|
6
6
|
Gem::Version.new VERSION::STRING
|
7
7
|
end
|
@@ -9,8 +9,8 @@ module ActionCable
|
|
9
9
|
module VERSION
|
10
10
|
MAJOR = 7
|
11
11
|
MINOR = 0
|
12
|
-
TINY =
|
13
|
-
PRE =
|
12
|
+
TINY = 4
|
13
|
+
PRE = nil
|
14
14
|
|
15
15
|
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
|
16
16
|
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
require "thread"
|
4
4
|
|
5
|
-
gem "redis", ">= 3", "<
|
5
|
+
gem "redis", ">= 3", "< 6"
|
6
6
|
require "redis"
|
7
7
|
|
8
8
|
require "active_support/core_ext/hash/except"
|
@@ -56,7 +56,7 @@ module ActionCable
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def redis_connection
|
59
|
-
self.class.redis_connector.call(@server.config.cable.merge(id: identifier))
|
59
|
+
self.class.redis_connector.call(@server.config.cable.symbolize_keys.merge(id: identifier))
|
60
60
|
end
|
61
61
|
|
62
62
|
class Listener < SubscriberMap
|
@@ -69,7 +69,7 @@ module ActionCable
|
|
69
69
|
@subscribe_callbacks = Hash.new { |h, k| h[k] = [] }
|
70
70
|
@subscription_lock = Mutex.new
|
71
71
|
|
72
|
-
@
|
72
|
+
@subscribed_client = nil
|
73
73
|
|
74
74
|
@when_connected = []
|
75
75
|
|
@@ -78,13 +78,13 @@ module ActionCable
|
|
78
78
|
|
79
79
|
def listen(conn)
|
80
80
|
conn.without_reconnect do
|
81
|
-
original_client = conn
|
81
|
+
original_client = extract_subscribed_client(conn)
|
82
82
|
|
83
83
|
conn.subscribe("_action_cable_internal") do |on|
|
84
84
|
on.subscribe do |chan, count|
|
85
85
|
@subscription_lock.synchronize do
|
86
86
|
if count == 1
|
87
|
-
@
|
87
|
+
@subscribed_client = original_client
|
88
88
|
|
89
89
|
until @when_connected.empty?
|
90
90
|
@when_connected.shift.call
|
@@ -106,7 +106,7 @@ module ActionCable
|
|
106
106
|
on.unsubscribe do |chan, count|
|
107
107
|
if count == 0
|
108
108
|
@subscription_lock.synchronize do
|
109
|
-
@
|
109
|
+
@subscribed_client = nil
|
110
110
|
end
|
111
111
|
end
|
112
112
|
end
|
@@ -119,8 +119,8 @@ module ActionCable
|
|
119
119
|
return if @thread.nil?
|
120
120
|
|
121
121
|
when_connected do
|
122
|
-
|
123
|
-
@
|
122
|
+
@subscribed_client.unsubscribe
|
123
|
+
@subscribed_client = nil
|
124
124
|
end
|
125
125
|
end
|
126
126
|
|
@@ -131,13 +131,13 @@ module ActionCable
|
|
131
131
|
@subscription_lock.synchronize do
|
132
132
|
ensure_listener_running
|
133
133
|
@subscribe_callbacks[channel] << on_success
|
134
|
-
when_connected {
|
134
|
+
when_connected { @subscribed_client.subscribe(channel) }
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
138
138
|
def remove_channel(channel)
|
139
139
|
@subscription_lock.synchronize do
|
140
|
-
when_connected {
|
140
|
+
when_connected { @subscribed_client.unsubscribe(channel) }
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
@@ -156,22 +156,49 @@ module ActionCable
|
|
156
156
|
end
|
157
157
|
|
158
158
|
def when_connected(&block)
|
159
|
-
if @
|
159
|
+
if @subscribed_client
|
160
160
|
block.call
|
161
161
|
else
|
162
162
|
@when_connected << block
|
163
163
|
end
|
164
164
|
end
|
165
165
|
|
166
|
-
|
167
|
-
|
166
|
+
if ::Redis::VERSION < "5"
|
167
|
+
class SubscribedClient
|
168
|
+
def initialize(raw_client)
|
169
|
+
@raw_client = raw_client
|
170
|
+
end
|
171
|
+
|
172
|
+
def subscribe(*channel)
|
173
|
+
send_command("subscribe", *channel)
|
174
|
+
end
|
175
|
+
|
176
|
+
def unsubscribe(*channel)
|
177
|
+
send_command("unsubscribe", *channel)
|
178
|
+
end
|
179
|
+
|
180
|
+
private
|
181
|
+
def send_command(*command)
|
182
|
+
@raw_client.write(command)
|
168
183
|
|
169
|
-
|
170
|
-
|
171
|
-
|
184
|
+
very_raw_connection =
|
185
|
+
@raw_client.connection.instance_variable_defined?(:@connection) &&
|
186
|
+
@raw_client.connection.instance_variable_get(:@connection)
|
172
187
|
|
173
|
-
|
174
|
-
|
188
|
+
if very_raw_connection && very_raw_connection.respond_to?(:flush)
|
189
|
+
very_raw_connection.flush
|
190
|
+
end
|
191
|
+
nil
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
def extract_subscribed_client(conn)
|
196
|
+
raw_client = conn.respond_to?(:_client) ? conn._client : conn.client
|
197
|
+
SubscribedClient.new(raw_client)
|
198
|
+
end
|
199
|
+
else
|
200
|
+
def extract_subscribed_client(conn)
|
201
|
+
conn
|
175
202
|
end
|
176
203
|
end
|
177
204
|
end
|
@@ -7,7 +7,7 @@ module ActionCable
|
|
7
7
|
# == Test adapter for Action Cable
|
8
8
|
#
|
9
9
|
# The test adapter should be used only in testing. Along with
|
10
|
-
#
|
10
|
+
# ActionCable::TestHelper it makes a great tool to test your Rails application.
|
11
11
|
#
|
12
12
|
# To use the test adapter set +adapter+ value to +test+ in your +config/cable.yml+ file.
|
13
13
|
#
|
data/lib/action_cable/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: actioncable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.0.
|
4
|
+
version: 7.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pratik Naik
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2022-
|
12
|
+
date: 2022-09-09 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: 7.0.
|
20
|
+
version: 7.0.4
|
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: 7.0.
|
27
|
+
version: 7.0.4
|
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: 7.0.
|
34
|
+
version: 7.0.4
|
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: 7.0.
|
41
|
+
version: 7.0.4
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: nio4r
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,10 +142,10 @@ licenses:
|
|
142
142
|
- MIT
|
143
143
|
metadata:
|
144
144
|
bug_tracker_uri: https://github.com/rails/rails/issues
|
145
|
-
changelog_uri: https://github.com/rails/rails/blob/v7.0.
|
146
|
-
documentation_uri: https://api.rubyonrails.org/v7.0.
|
145
|
+
changelog_uri: https://github.com/rails/rails/blob/v7.0.4/actioncable/CHANGELOG.md
|
146
|
+
documentation_uri: https://api.rubyonrails.org/v7.0.4/
|
147
147
|
mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
|
148
|
-
source_code_uri: https://github.com/rails/rails/tree/v7.0.
|
148
|
+
source_code_uri: https://github.com/rails/rails/tree/v7.0.4/actioncable
|
149
149
|
rubygems_mfa_required: 'true'
|
150
150
|
post_install_message:
|
151
151
|
rdoc_options: []
|
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
162
162
|
- !ruby/object:Gem::Version
|
163
163
|
version: '0'
|
164
164
|
requirements: []
|
165
|
-
rubygems_version: 3.
|
165
|
+
rubygems_version: 3.3.3
|
166
166
|
signing_key:
|
167
167
|
specification_version: 4
|
168
168
|
summary: WebSocket framework for Rails.
|