actioncable 7.0.3.1 → 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 +15 -0
- data/lib/action_cable/engine.rb +1 -1
- data/lib/action_cable/gem_version.rb +2 -2
- data/lib/action_cable/subscription_adapter/redis.rb +45 -18
- metadata +9 -9
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,18 @@
|
|
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
|
+
|
1
16
|
## Rails 7.0.3.1 (July 12, 2022) ##
|
2
17
|
|
3
18
|
* No changes.
|
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
|
@@ -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
|
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: []
|