actioncable 7.0.3.1 → 7.0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 408aec7614b5d7b932c1d3b56c3f94c6b88702586571742865c9950b81be78da
4
- data.tar.gz: 36de66d136571f0a41aaa1aaf15e83815ecf6e3a2240a5a9aab82a99367db677
3
+ metadata.gz: 0c75809e639ee1e69fc606e000569aa3b0c4cc26e6aa008d51c480195a7ebf9b
4
+ data.tar.gz: 80ad255d217461c43a1b2771ff7b9390c32b44fbdd85a4d9aee08788613d072a
5
5
  SHA512:
6
- metadata.gz: 7034514598796cdec586ba1b822aaaa2a73239ce13c85b5dba63e0407c5b543dd9649d19678c11d179a8704303f2a49fdc40d8a55c3b7489fb7cafa845d92dd0
7
- data.tar.gz: d6bd2c02af39ceea3bd37c6a737293d87a373ca7bb3ea28f6462ea1d8099521f8d5ea2b002cc21fe66278fdab59b3368afdc81b8a2d69b0060b1fd463a2dbb3a
6
+ metadata.gz: 17a7865c6bde6585ae2003a714a6feb0e973dabf81433c7babb841018d09cc0841a3b01bf90ef5c3b9bb0cfea08f019a0a845968030469e30c7d1a1d3211c71b
7
+ data.tar.gz: da1a308f38c69cfe7a54900b0d6dec1eaaae5ceebeac4805baeb1910a63ae61496482eb486e93e8d084f4b162be495d88d7595e484281fa9a9338a8ee3be6b47
data/CHANGELOG.md CHANGED
@@ -1,3 +1,23 @@
1
+ ## Rails 7.0.4.1 (January 17, 2023) ##
2
+
3
+ * No changes.
4
+
5
+
6
+ ## Rails 7.0.4 (September 09, 2022) ##
7
+
8
+ * The Redis adapter is now compatible with redis-rb 5.0
9
+
10
+ Compatibility with redis-rb 3.x was dropped.
11
+
12
+ *Jean Boussier*
13
+
14
+ * The Action Cable server is now mounted with `anchor: true`.
15
+
16
+ This means that routes that also start with `/cable` will no longer clash with Action Cable.
17
+
18
+ *Alex Ghiculescu*
19
+
20
+
1
21
  ## Rails 7.0.3.1 (July 12, 2022) ##
2
22
 
3
23
  * No changes.
@@ -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
@@ -9,7 +9,7 @@ module ActionCable
9
9
  module VERSION
10
10
  MAJOR = 7
11
11
  MINOR = 0
12
- TINY = 3
12
+ TINY = 4
13
13
  PRE = "1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "thread"
4
4
 
5
- gem "redis", ">= 3", "< 5"
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
- @raw_client = nil
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.respond_to?(:_client) ? conn._client : conn.client
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
- @raw_client = original_client
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
- @raw_client = nil
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
- send_command("unsubscribe")
123
- @raw_client = nil
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 { send_command("subscribe", channel) }
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 { send_command("unsubscribe", channel) }
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 @raw_client
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
- def send_command(*command)
167
- @raw_client.write(command)
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
- very_raw_connection =
170
- @raw_client.connection.instance_variable_defined?(:@connection) &&
171
- @raw_client.connection.instance_variable_get(:@connection)
184
+ very_raw_connection =
185
+ @raw_client.connection.instance_variable_defined?(:@connection) &&
186
+ @raw_client.connection.instance_variable_get(:@connection)
172
187
 
173
- if very_raw_connection && very_raw_connection.respond_to?(:flush)
174
- very_raw_connection.flush
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.3.1
4
+ version: 7.0.4.1
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-07-12 00:00:00.000000000 Z
12
+ date: 2023-01-17 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.3.1
20
+ version: 7.0.4.1
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.3.1
27
+ version: 7.0.4.1
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.3.1
34
+ version: 7.0.4.1
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.3.1
41
+ version: 7.0.4.1
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.3.1/actioncable/CHANGELOG.md
146
- documentation_uri: https://api.rubyonrails.org/v7.0.3.1/
145
+ changelog_uri: https://github.com/rails/rails/blob/v7.0.4.1/actioncable/CHANGELOG.md
146
+ documentation_uri: https://api.rubyonrails.org/v7.0.4.1/
147
147
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
148
- source_code_uri: https://github.com/rails/rails/tree/v7.0.3.1/actioncable
148
+ source_code_uri: https://github.com/rails/rails/tree/v7.0.4.1/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.3.3
165
+ rubygems_version: 3.4.3
166
166
  signing_key:
167
167
  specification_version: 4
168
168
  summary: WebSocket framework for Rails.