actioncable 8.0.3 → 8.1.0.beta1

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: b5950ddf79b0417b9d031167d623e0ab30fdf9055847e31113e9c38cdd5f41ee
4
- data.tar.gz: 1036c6f9afa0cef78179675a8a8c5e49074079364bde0fb71662fd8f31ec5ed8
3
+ metadata.gz: 23d628c9902e296471a081c1fd0781d562485649067e725dd85f2d13aeb1ab77
4
+ data.tar.gz: ad44df73a5681b4ecaeeee4d4831107da2da833210c78e9f86ad1bf11195d920
5
5
  SHA512:
6
- metadata.gz: 4800620d87efb612cef53a992510aca7be81079f9a093f267fdf8b1ac03323103d465a3925de5524a7bf2cadb0ada6545f40f44d52d5f01c5696b9db97c99bb3
7
- data.tar.gz: 86d543ad0837fa3fa617fddab3d34eb627e2443977c1249ecc02c5dbe8942b29af72481ca17089964b6194b0047c41f4e04a85bba8354aa2f78fe92c37592523
6
+ metadata.gz: 1197007dc525dbdaece760efafe54b6b5bf7eb4c30f37b4b899aeaf0e0bbf8fe7598b9c391ca0efa2f0b9f4f70703cce154126f09b151e2bbbac0a5c62ee75e1
7
+ data.tar.gz: 41338ae8f3611fffe437dc6a9f1f215bc1e03b8a0515ad7feaed8a28db96a67d5c7454b845b8e9637a2d61ba2d2aa7143fa3918feaaa9629b167fd63ee6719b0
data/CHANGELOG.md CHANGED
@@ -1,58 +1,11 @@
1
- ## Rails 8.0.3 (September 22, 2025) ##
1
+ ## Rails 8.1.0.beta1 (September 04, 2025) ##
2
2
 
3
- * Fixed compatibility with `redis` gem `5.4.1`
3
+ * Allow passing composite channels to `ActionCable::Channel#stream_for` e.g. `stream_for [ group, group.owner ]`
4
4
 
5
- *Jean Boussier*
5
+ *hey-leon*
6
6
 
7
- * Fixed a possible race condition in `stream_from`.
7
+ * Allow setting nil as subscription connection identifier for Redis.
8
8
 
9
- *OuYangJinTing*
9
+ *Nguyen Nguyen*
10
10
 
11
-
12
- ## Rails 8.0.2.1 (August 13, 2025) ##
13
-
14
- * No changes.
15
-
16
-
17
- ## Rails 8.0.2 (March 12, 2025) ##
18
-
19
- * No changes.
20
-
21
-
22
- ## Rails 8.0.1 (December 13, 2024) ##
23
-
24
- * Ensure the Postgresql adapter always use a dedicated connection even during system tests.
25
-
26
- Fix an issue with the Action Cable Postgresql adapter causing deadlock or various weird
27
- pg client error during system tests.
28
-
29
- *Jean Boussier*
30
-
31
-
32
- ## Rails 8.0.0.1 (December 10, 2024) ##
33
-
34
- * No changes.
35
-
36
-
37
- ## Rails 8.0.0 (November 07, 2024) ##
38
-
39
- * No changes.
40
-
41
-
42
- ## Rails 8.0.0.rc2 (October 30, 2024) ##
43
-
44
- * No changes.
45
-
46
-
47
- ## Rails 8.0.0.rc1 (October 19, 2024) ##
48
-
49
- * No changes.
50
-
51
-
52
- ## Rails 8.0.0.beta1 (September 26, 2024) ##
53
-
54
- * Add an `identifier` to the event payload for the ActiveSupport::Notification `transmit_subscription_confirmation.action_cable` and `transmit_subscription_rejection.action_cable`.
55
-
56
- *Keith Schacht*
57
-
58
- Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actioncable/CHANGELOG.md) for previous changes.
11
+ Please check [8-0-stable](https://github.com/rails/rails/blob/8-0-stable/actioncable/CHANGELOG.md) for previous changes.
@@ -10,19 +10,19 @@ module ActionCable
10
10
  extend ActiveSupport::Concern
11
11
 
12
12
  module ClassMethods
13
- # Broadcast a hash to a unique broadcasting for this `model` in this channel.
14
- def broadcast_to(model, message)
15
- ActionCable.server.broadcast(broadcasting_for(model), message)
13
+ # Broadcast a hash to a unique broadcasting for this array of `broadcastables` in this channel.
14
+ def broadcast_to(broadcastables, message)
15
+ ActionCable.server.broadcast(broadcasting_for(broadcastables), message)
16
16
  end
17
17
 
18
18
  # Returns a unique broadcasting identifier for this `model` in this channel:
19
19
  #
20
20
  # CommentsChannel.broadcasting_for("all") # => "comments:all"
21
21
  #
22
- # You can pass any object as a target (e.g. Active Record model), and it would
22
+ # You can pass an array of objects as a target (e.g. Active Record model), and it would
23
23
  # be serialized into a string under the hood.
24
- def broadcasting_for(model)
25
- serialize_broadcasting([ channel_name, model ])
24
+ def broadcasting_for(broadcastables)
25
+ serialize_broadcasting([ channel_name ] + Array(broadcastables))
26
26
  end
27
27
 
28
28
  private
@@ -108,15 +108,15 @@ module ActionCable
108
108
  end
109
109
  end
110
110
 
111
- # Start streaming the pubsub queue for the `model` in this channel. Optionally,
111
+ # Start streaming the pubsub queue for the `broadcastables` in this channel. Optionally,
112
112
  # you can pass a `callback` that'll be used instead of the default of just
113
113
  # transmitting the updates straight to the subscriber.
114
114
  #
115
115
  # Pass `coder: ActiveSupport::JSON` to decode messages as JSON before passing to
116
116
  # the callback. Defaults to `coder: nil` which does no decoding, passes raw
117
117
  # messages.
118
- def stream_for(model, callback = nil, coder: nil, &block)
119
- stream_from(broadcasting_for(model), callback || block, coder: coder)
118
+ def stream_for(broadcastables, callback = nil, coder: nil, &block)
119
+ stream_from(broadcasting_for(broadcastables), callback || block, coder: coder)
120
120
  end
121
121
 
122
122
  # Unsubscribes streams from the named `broadcasting`.
@@ -68,6 +68,7 @@ module ActionCable
68
68
  @nio ||= NIO::Selector.new
69
69
 
70
70
  @executor ||= Concurrent::ThreadPoolExecutor.new(
71
+ name: "ActionCable-streamer",
71
72
  min_threads: 1,
72
73
  max_threads: 10,
73
74
  max_queue: 0,
@@ -10,9 +10,9 @@ module ActionCable
10
10
 
11
11
  module VERSION
12
12
  MAJOR = 8
13
- MINOR = 0
14
- TINY = 3
15
- PRE = nil
13
+ MINOR = 1
14
+ TINY = 0
15
+ PRE = "beta1"
16
16
 
17
17
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
18
18
  end
@@ -21,10 +21,12 @@ module ActionCable
21
21
  # ActionCable.server.broadcast \
22
22
  # "web_notifications_1", { title: "New things!", body: "All that's fit for print" }
23
23
  #
24
- # # Client-side CoffeeScript, which assumes you've already requested the right to send web notifications:
25
- # App.cable.subscriptions.create "WebNotificationsChannel",
26
- # received: (data) ->
27
- # new Notification data['title'], body: data['body']
24
+ # # Client-side JavaScript, which assumes you've already requested the right to send web notifications:
25
+ # App.cable.subscriptions.create("WebNotificationsChannel", {
26
+ # received: function(data) {
27
+ # new Notification(data['title'], { body: data['body'] })
28
+ # }
29
+ # })
28
30
  module Broadcasting
29
31
  # Broadcast a hash directly to a named `broadcasting`. This will later be JSON
30
32
  # encoded.
@@ -20,7 +20,7 @@ module ActionCable
20
20
 
21
21
  def initialize(max_size: 5)
22
22
  @executor = Concurrent::ThreadPoolExecutor.new(
23
- name: "ActionCable",
23
+ name: "ActionCable-server",
24
24
  min_threads: 1,
25
25
  max_threads: max_size,
26
26
  max_queue: 0,
@@ -29,7 +29,8 @@ module ActionCable
29
29
  end
30
30
 
31
31
  def identifier
32
- @server.config.cable[:id] ||= "ActionCable-PID-#{$$}"
32
+ @server.config.cable[:id] = "ActionCable-PID-#{$$}" unless @server.config.cable.key?(:id)
33
+ @server.config.cable[:id]
33
34
  end
34
35
  end
35
36
  end
@@ -59,17 +59,17 @@ module Rails
59
59
  def create_channel_javascript_file
60
60
  channel_js_path = File.join("app/javascript/channels", class_path, "#{file_name}_channel")
61
61
  js_template "javascript/channel", channel_js_path
62
- gsub_file "#{channel_js_path}.js", /\.\/consumer/, "channels/consumer" unless using_js_runtime?
62
+ gsub_file "#{channel_js_path}.js", /\.\/consumer/, "channels/consumer" if using_importmap?
63
63
  end
64
64
 
65
65
  def import_channels_in_javascript_entrypoint
66
66
  append_to_file "app/javascript/application.js",
67
- using_js_runtime? ? %(import "./channels"\n) : %(import "channels"\n)
67
+ using_importmap? ? %(import "channels"\n) : %(import "./channels"\n)
68
68
  end
69
69
 
70
70
  def import_channel_in_javascript_entrypoint
71
71
  append_to_file "app/javascript/channels/index.js",
72
- using_js_runtime? ? %(import "./#{file_name}_channel"\n) : %(import "channels/#{file_name}_channel"\n)
72
+ using_importmap? ? %(import "channels/#{file_name}_channel"\n) : %(import "./#{file_name}_channel"\n)
73
73
  end
74
74
 
75
75
  def install_javascript_dependencies
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.0.3
4
+ version: 8.1.0.beta1
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.0.3
19
+ version: 8.1.0.beta1
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.3
26
+ version: 8.1.0.beta1
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.3
33
+ version: 8.1.0.beta1
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.3
40
+ version: 8.1.0.beta1
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.3/actioncable/CHANGELOG.md
157
- documentation_uri: https://api.rubyonrails.org/v8.0.3/
156
+ changelog_uri: https://github.com/rails/rails/blob/v8.1.0.beta1/actioncable/CHANGELOG.md
157
+ documentation_uri: https://api.rubyonrails.org/v8.1.0.beta1/
158
158
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
159
- source_code_uri: https://github.com/rails/rails/tree/v8.0.3/actioncable
159
+ source_code_uri: https://github.com/rails/rails/tree/v8.1.0.beta1/actioncable
160
160
  rubygems_mfa_required: 'true'
161
161
  rdoc_options: []
162
162
  require_paths: