actioncable 8.1.3.1 → 8.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0eed54050560b7c8f86a757021041bfdf99e73e9a4357bc8a6999bbf53fc7de6
4
- data.tar.gz: a0f219b5589ace70a047e22a0c9ec8f8fe34be92f13f73f02438dc0bbc954373
3
+ metadata.gz: 9e479761f7cd2d502b516e38bf0a3472e455adee7ab677bddd132b7fa3baebd7
4
+ data.tar.gz: 1eed2457c040797436ccd9142ff19142d88bf618d795c2f3f89783534567bc41
5
5
  SHA512:
6
- metadata.gz: 1e1e38989e414a5c1716f39838a7bc86cdc86d05a0588c633476f55ed77dcdbccfdadb253fce650abe74933a490fe8656f13072e107a89bb89f5ea768eda4dcf
7
- data.tar.gz: 7a3a0384fd3e5efb2f53ebffdeed1a45ecfd277a71e67c113b19033653d178399afd107b3704d3ff736458eb4f1caff371d8a1038e66c696ddd02f7df327518d
6
+ metadata.gz: 27e3d0ba173e32b6b73fa614b7c5914af51dd7dbd61db770834c223b2f0d2d080c4e7d2022c8deccbd967db03a69d7a15ff7c2039ff283c8a3f8e1cbe9c0c6c5
7
+ data.tar.gz: 0e4652232b9947953f7afc56ca79d6c56eb830362d41dc824371b91c05b3ff39962f421d9844b9708667b696be3a68dd9460ed3ae7ec645662e0877edc3e84cd
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## Rails 8.1.4 (September 24, 2026) ##
2
+
3
+ * Allow `redis-rb` 6 in the Action Cable Redis subscription adapter.
4
+
5
+ *Shuta Mugikura*
6
+
7
+ * Fix the PostgreSQL subscription adapter dropping broadcasts to long multibyte stream names.
8
+
9
+ PostgreSQL identifiers are limited to 63 *bytes*, and the adapter hashes any
10
+ name over that limit to avoid silent truncation. The length check was done on
11
+ character count rather than byte size, so a multibyte stream name with 63 or
12
+ fewer characters but more than 63 bytes was silently truncated by PostgreSQL.
13
+
14
+ *Kenta Ishizaki*
15
+
16
+
1
17
  ## Rails 8.1.3.1 (July 29, 2026) ##
2
18
 
3
19
  * No changes.
@@ -4,6 +4,7 @@
4
4
 
5
5
  require "active_support/rescuable"
6
6
  require "active_support/parameter_filter"
7
+ require "concurrent"
7
8
 
8
9
  module ActionCable
9
10
  module Channel
@@ -128,7 +128,7 @@ module ActionCable
128
128
  # ## Connection is automatically inferred
129
129
  #
130
130
  # ActionCable::Connection::TestCase will automatically infer the connection
131
- # under test from the test class name. If the channel cannot be inferred from
131
+ # under test from the test class name. If the connection cannot be inferred from
132
132
  # the test class name, you can explicitly set it with `tests`.
133
133
  #
134
134
  # class ConnectionTest < ActionCable::Connection::TestCase
@@ -11,8 +11,8 @@ module ActionCable
11
11
  module VERSION
12
12
  MAJOR = 8
13
13
  MINOR = 1
14
- TINY = 3
15
- PRE = "1"
14
+ TINY = 4
15
+ PRE = nil
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
18
  end
@@ -2,6 +2,7 @@
2
2
 
3
3
  # :markup: markdown
4
4
 
5
+ require "concurrent"
5
6
  require "monitor"
6
7
 
7
8
  module ActionCable
@@ -58,7 +58,13 @@ module ActionCable
58
58
 
59
59
  private
60
60
  def channel_identifier(channel)
61
- channel.size > 63 ? OpenSSL::Digest::SHA1.hexdigest(channel) : channel
61
+ # PostgreSQL identifiers are limited to NAMEDATALEN-1 (63) *bytes*, not
62
+ # characters, and are silently truncated past that. Truncation makes the
63
+ # name we LISTEN/subscribe under differ from the one wait_for_notify hands
64
+ # back, so notifications would miss their subscribers. Hash on byte length
65
+ # so multibyte channel names that exceed the limit stay within it.
66
+ # See https://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
67
+ channel.bytesize > 63 ? OpenSSL::Digest::SHA1.hexdigest(channel) : channel
62
68
  end
63
69
 
64
70
  def listener
@@ -2,7 +2,7 @@
2
2
 
3
3
  # :markup: markdown
4
4
 
5
- gem "redis", ">= 4", "< 6"
5
+ gem "redis", ">= 4", "< 7"
6
6
  require "redis"
7
7
 
8
8
  require "active_support/core_ext/hash/except"
data/lib/action_cable.rb CHANGED
@@ -41,7 +41,10 @@ Zeitwerk::Loader.for_gem.tap do |loader|
41
41
  )
42
42
 
43
43
  loader.do_not_eager_load(
44
- "#{lib}/action_cable/subscription_adapter", # Adapters are required and loaded on demand.
44
+ # These adapters trigger optional dependencies so they are required and loaded on demand.
45
+ "#{lib}/action_cable/subscription_adapter/redis.rb",
46
+ "#{lib}/action_cable/subscription_adapter/postgresql.rb",
47
+
45
48
  "#{lib}/action_cable/test_helper.rb",
46
49
  Dir["#{lib}/action_cable/**/test_case.rb"]
47
50
  )
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: 8.1.3.1
4
+ version: 8.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pratik Naik
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 8.1.3.1
19
+ version: 8.1.4
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.1.3.1
26
+ version: 8.1.4
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.1.3.1
33
+ version: 8.1.4
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.1.3.1
40
+ version: 8.1.4
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.1.3.1/actioncable/CHANGELOG.md
157
- documentation_uri: https://api.rubyonrails.org/v8.1.3.1/
156
+ changelog_uri: https://github.com/rails/rails/blob/v8.1.4/actioncable/CHANGELOG.md
157
+ documentation_uri: https://api.rubyonrails.org/v8.1.4/
158
158
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
159
- source_code_uri: https://github.com/rails/rails/tree/v8.1.3.1/actioncable
159
+ source_code_uri: https://github.com/rails/rails/tree/v8.1.4/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: 4.0.16
175
+ rubygems_version: 4.0.20
176
176
  specification_version: 4
177
177
  summary: WebSocket framework for Rails.
178
178
  test_files: []