actioncable 8.0.2 → 8.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d3e66597e8d551746c5342b0c1136f809e75f096cc1089ba64f29473cbb272a
4
- data.tar.gz: d57988339ac844f7348ba389a1deb2376f001bc451ba181924515e99b165d4cd
3
+ metadata.gz: b5950ddf79b0417b9d031167d623e0ab30fdf9055847e31113e9c38cdd5f41ee
4
+ data.tar.gz: 1036c6f9afa0cef78179675a8a8c5e49074079364bde0fb71662fd8f31ec5ed8
5
5
  SHA512:
6
- metadata.gz: 39cea59bfec3bdb771f7d3ad410563fb7115e824ac0d9cdaa992e2968d2142b423aeaab19b80b91955a9a18496c6ba1997e041c93b285b23173a10d7ece8fd22
7
- data.tar.gz: c1d6d4493605203f6949576b2cfb1481c84f1a03ac4b63cee6424b3847c54f37367050b67e544f06697250c57e82df019772b57066ebe576dac231af690540ec
6
+ metadata.gz: 4800620d87efb612cef53a992510aca7be81079f9a093f267fdf8b1ac03323103d465a3925de5524a7bf2cadb0ada6545f40f44d52d5f01c5696b9db97c99bb3
7
+ data.tar.gz: 86d543ad0837fa3fa617fddab3d34eb627e2443977c1249ecc02c5dbe8942b29af72481ca17089964b6194b0047c41f4e04a85bba8354aa2f78fe92c37592523
data/CHANGELOG.md CHANGED
@@ -1,4 +1,15 @@
1
- ## Rails 8.0.2 (March 12, 2025) ##
1
+ ## Rails 8.0.3 (September 22, 2025) ##
2
+
3
+ * Fixed compatibility with `redis` gem `5.4.1`
4
+
5
+ *Jean Boussier*
6
+
7
+ * Fixed a possible race condition in `stream_from`.
8
+
9
+ *OuYangJinTing*
10
+
11
+
12
+ ## Rails 8.0.2.1 (August 13, 2025) ##
2
13
 
3
14
  * No changes.
4
15
 
data/README.md CHANGED
@@ -19,6 +19,6 @@ Bug reports for the Ruby on \Rails project can be filed here:
19
19
 
20
20
  * https://github.com/rails/rails/issues
21
21
 
22
- Feature requests should be discussed on the rails-core mailing list here:
22
+ Feature requests should be discussed on the rubyonrails-core forum here:
23
23
 
24
24
  * https://discuss.rubyonrails.org/c/rubyonrails-core
@@ -165,6 +165,7 @@ module ActionCable
165
165
 
166
166
  @reject_subscription = nil
167
167
  @subscription_confirmation_sent = nil
168
+ @unsubscribed = false
168
169
 
169
170
  delegate_connection_identifiers
170
171
  end
@@ -200,11 +201,16 @@ module ActionCable
200
201
  # cleanup with callbacks. This method is not intended to be called directly by
201
202
  # the user. Instead, override the #unsubscribed callback.
202
203
  def unsubscribe_from_channel # :nodoc:
204
+ @unsubscribed = true
203
205
  run_callbacks :unsubscribe do
204
206
  unsubscribed
205
207
  end
206
208
  end
207
209
 
210
+ def unsubscribed? # :nodoc:
211
+ @unsubscribed
212
+ end
213
+
208
214
  private
209
215
  # Called once a consumer has become a subscriber of the channel. Usually the
210
216
  # place to set up any streams you want this channel to be sending to the
@@ -88,6 +88,8 @@ module ActionCable
88
88
  # callback. Defaults to `coder: nil` which does no decoding, passes raw
89
89
  # messages.
90
90
  def stream_from(broadcasting, callback = nil, coder: nil, &block)
91
+ return if unsubscribed?
92
+
91
93
  broadcasting = String(broadcasting)
92
94
 
93
95
  # Don't send the confirmation until pubsub#subscribe is successful
@@ -11,7 +11,7 @@ module ActionCable
11
11
  module VERSION
12
12
  MAJOR = 8
13
13
  MINOR = 0
14
- TINY = 2
14
+ TINY = 3
15
15
  PRE = nil
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
@@ -164,7 +164,7 @@ module ActionCable
164
164
  begin
165
165
  conn = @adapter.redis_connection_for_subscriptions
166
166
  listen conn
167
- rescue ConnectionError
167
+ rescue *CONNECTION_ERRORS
168
168
  reset
169
169
  if retry_connecting?
170
170
  when_connected { resubscribe }
@@ -210,7 +210,7 @@ module ActionCable
210
210
  end
211
211
 
212
212
  if ::Redis::VERSION < "5"
213
- ConnectionError = ::Redis::BaseConnectionError
213
+ CONNECTION_ERRORS = [::Redis::BaseConnectionError].freeze
214
214
 
215
215
  class SubscribedClient
216
216
  def initialize(raw_client)
@@ -244,7 +244,12 @@ module ActionCable
244
244
  SubscribedClient.new(conn._client)
245
245
  end
246
246
  else
247
- ConnectionError = RedisClient::ConnectionError
247
+ CONNECTION_ERRORS = [
248
+ ::Redis::BaseConnectionError,
249
+
250
+ # Some older versions of redis-rb sometime leak underlying exceptions
251
+ RedisClient::ConnectionError,
252
+ ].freeze
248
253
 
249
254
  def extract_subscribed_client(conn)
250
255
  conn
@@ -105,7 +105,7 @@ pin_all_from "app/javascript/channels", under: "channels"
105
105
  end
106
106
 
107
107
  def using_bun?
108
- # Cannot assume bun.lockb has been generated yet so we look for a file known to
108
+ # Cannot assume Bun lockfile has been generated yet so we look for a file known to
109
109
  # be generated by the jsbundling-rails gem
110
110
  @using_bun ||= using_js_runtime? && root.join("bun.config.js").exist?
111
111
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actioncable
3
3
  version: !ruby/object:Gem::Version
4
- version: 8.0.2
4
+ version: 8.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pratik Naik
8
8
  - David Heinemeier Hansson
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-03-12 00:00:00.000000000 Z
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 8.0.2
19
+ version: 8.0.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 8.0.2
26
+ version: 8.0.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: actionpack
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - '='
32
32
  - !ruby/object:Gem::Version
33
- version: 8.0.2
33
+ version: 8.0.3
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - '='
39
39
  - !ruby/object:Gem::Version
40
- version: 8.0.2
40
+ version: 8.0.3
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: nio4r
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -153,10 +153,10 @@ licenses:
153
153
  - MIT
154
154
  metadata:
155
155
  bug_tracker_uri: https://github.com/rails/rails/issues
156
- changelog_uri: https://github.com/rails/rails/blob/v8.0.2/actioncable/CHANGELOG.md
157
- documentation_uri: https://api.rubyonrails.org/v8.0.2/
156
+ changelog_uri: https://github.com/rails/rails/blob/v8.0.3/actioncable/CHANGELOG.md
157
+ documentation_uri: https://api.rubyonrails.org/v8.0.3/
158
158
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
159
- source_code_uri: https://github.com/rails/rails/tree/v8.0.2/actioncable
159
+ source_code_uri: https://github.com/rails/rails/tree/v8.0.3/actioncable
160
160
  rubygems_mfa_required: 'true'
161
161
  rdoc_options: []
162
162
  require_paths:
@@ -172,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
172
172
  - !ruby/object:Gem::Version
173
173
  version: '0'
174
174
  requirements: []
175
- rubygems_version: 3.6.2
175
+ rubygems_version: 3.6.9
176
176
  specification_version: 4
177
177
  summary: WebSocket framework for Rails.
178
178
  test_files: []