actioncable 6.0.6.1 → 6.1.0.rc1

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: 882be1e6676b7ce91097561f41e964e5f0d2e1d35c38e157c9d5c86dc4b3d008
4
- data.tar.gz: fcf2c1e56a948ab0d57d70aeaf6ae041bdb860d98dcd3a9e93017746211579e5
3
+ metadata.gz: '092e0f4da989f896c2b9926bde6aba57287b719f59a31eb9d6e50447547c14f9'
4
+ data.tar.gz: bc103b20688523c1d869c08ba8b7a211b30e01f8e8b46f545a3c4f8dcbbe09d2
5
5
  SHA512:
6
- metadata.gz: ec8b14e09d3d322f5ecd792bba2f2cc3febff0c84acf0759fc9640922a5f19fb9d190e86016eacd565dc214f0c7b3f605d7cc99f97699c707af7e13bff760399
7
- data.tar.gz: e17602b825c53a4a7ab78b087a31c5a076c3ca642b37f9c3bdd55cff6c7b95533b892314bb518aadada934f26affd2d1fdb597d56ff8b652a60a01c632f8e434
6
+ metadata.gz: 923749293a1a29b9d75507a0558c755c737b12a595f0e33ca81e5e39b415dedc63fb8b93e40be99e50877d6470312cad3adf0e303e5652864aa6bcf159a9fbca
7
+ data.tar.gz: 533a1cf1c47f07c9d6f9044e5ad5f6a78ed78a2ec5daf29d0de51b63d5f2d8bbeff46355ddc4ff0466d8a3d91d6da5d29818a5142f0a669032dad85455d403ab
data/CHANGELOG.md CHANGED
@@ -1,299 +1,40 @@
1
- ## Rails 6.0.6.1 (January 17, 2023) ##
1
+ ## Rails 6.1.0.rc1 (November 02, 2020) ##
2
2
 
3
- * No changes.
3
+ * `ActionCable::Connection::Base` now allows intercepting unhandled exceptions
4
+ with `rescue_from` before they are logged, which is useful for error reporting
5
+ tools and other integrations.
4
6
 
7
+ *Justin Talbott*
5
8
 
6
- ## Rails 6.0.6 (September 09, 2022) ##
9
+ * Add `ActionCable::Channel#stream_or_reject_for` to stream if record is present, otherwise reject the connection
7
10
 
8
- * No changes.
11
+ *Atul Bhosale*
9
12
 
13
+ * Add `ActionCable::Channel#stop_stream_from` and `#stop_stream_for` to unsubscribe from a specific stream.
10
14
 
11
- ## Rails 6.0.5.1 (July 12, 2022) ##
15
+ *Zhang Kang*
12
16
 
13
- * No changes.
17
+ * Add PostgreSQL subscription connection identificator.
14
18
 
19
+ Now you can distinguish Action Cable PostgreSQL subscription connections among others.
20
+ Also, you can set custom `id` in `cable.yml` configuration.
15
21
 
16
- ## Rails 6.0.5 (May 09, 2022) ##
17
-
18
- * No changes.
19
-
20
-
21
- ## Rails 6.0.4.8 (April 26, 2022) ##
22
-
23
- * No changes.
24
-
25
-
26
- ## Rails 6.0.4.7 (March 08, 2022) ##
27
-
28
- * No changes.
29
-
30
-
31
- ## Rails 6.0.4.6 (February 11, 2022) ##
32
-
33
- * No changes.
34
-
35
-
36
- ## Rails 6.0.4.5 (February 11, 2022) ##
37
-
38
- * No changes.
39
-
40
-
41
- ## Rails 6.0.4.4 (December 15, 2021) ##
42
-
43
- * No changes.
44
-
45
-
46
- ## Rails 6.0.4.3 (December 14, 2021) ##
47
-
48
- * No changes.
49
-
50
-
51
- ## Rails 6.0.4.2 (December 14, 2021) ##
52
-
53
- * No changes.
54
-
55
-
56
- ## Rails 6.0.4.1 (August 19, 2021) ##
57
-
58
- * No changes.
59
-
60
-
61
- ## Rails 6.0.4 (June 15, 2021) ##
62
-
63
- * No changes.
64
-
65
-
66
- ## Rails 6.0.3.7 (May 05, 2021) ##
67
-
68
- * No changes.
69
-
70
-
71
- ## Rails 6.0.3.6 (May 04, 2021) ##
72
-
73
- * No changes.
74
-
75
-
76
- ## Rails 6.0.3.6 (March 26, 2021) ##
77
-
78
- * No changes.
79
-
80
-
81
- ## Rails 6.0.3.5 (February 10, 2021) ##
82
-
83
- * No changes.
84
-
85
-
86
- ## Rails 6.0.3.4 (October 07, 2020) ##
87
-
88
- * No changes.
89
-
90
-
91
- ## Rails 6.0.3.3 (September 09, 2020) ##
92
-
93
- * No changes.
94
-
95
-
96
- ## Rails 6.0.3.2 (June 17, 2020) ##
97
-
98
- * No changes.
99
-
100
-
101
- ## Rails 6.0.3.1 (May 18, 2020) ##
102
-
103
- * No changes.
104
-
105
-
106
- ## Rails 6.0.3 (May 06, 2020) ##
107
-
108
- * No changes.
109
-
110
-
111
- ## Rails 6.0.2.2 (March 19, 2020) ##
112
-
113
- * No changes.
114
-
115
-
116
- ## Rails 6.0.2.1 (December 18, 2019) ##
117
-
118
- * No changes.
119
-
120
-
121
- ## Rails 6.0.2 (December 13, 2019) ##
122
-
123
- * No changes.
124
-
125
-
126
- ## Rails 6.0.1 (November 5, 2019) ##
127
-
128
- * No changes.
129
-
130
-
131
- ## Rails 6.0.0 (August 16, 2019) ##
132
-
133
- * No changes.
134
-
135
-
136
- ## Rails 6.0.0.rc2 (July 22, 2019) ##
137
-
138
- * No changes.
139
-
140
-
141
- ## Rails 6.0.0.rc1 (April 24, 2019) ##
142
-
143
- * No changes.
144
-
145
-
146
- ## Rails 6.0.0.beta3 (March 11, 2019) ##
147
-
148
- * No changes.
149
-
150
-
151
- ## Rails 6.0.0.beta2 (February 25, 2019) ##
152
-
153
- * PostgreSQL subscription adapters now support `channel_prefix` option in cable.yml
154
-
155
- Avoids channel name collisions when multiple apps use the same database for Action Cable.
156
-
157
- *Vladimir Dementyev*
158
-
159
- * Allow passing custom configuration to `ActionCable::Server::Base`.
160
-
161
- You can now create a standalone Action Cable server with a custom configuration
162
- (e.g. to run it in isolation from the default one):
163
-
164
- ```ruby
165
- config = ActionCable::Server::Configuration.new
166
- config.cable = { adapter: "redis", channel_prefix: "custom_" }
167
-
168
- CUSTOM_CABLE = ActionCable::Server::Base.new(config: config)
169
- ```
170
-
171
- Then you can mount it in the `routes.rb` file:
172
-
173
- ```ruby
174
- Rails.application.routes.draw do
175
- mount CUSTOM_CABLE => "/custom_cable"
176
- # ...
177
- end
178
- ```
179
-
180
- *Vladimir Dementyev*
181
-
182
- * Add `:action_cable_connection` and `:action_cable_channel` load hooks.
183
-
184
- You can use them to extend `ActionCable::Connection::Base` and `ActionCable::Channel::Base`
185
- functionality:
186
-
187
- ```ruby
188
- ActiveSupport.on_load(:action_cable_channel) do
189
- # do something in the context of ActionCable::Channel::Base
190
- end
191
- ```
192
-
193
- *Vladimir Dementyev*
194
-
195
- * Add `Channel::Base#broadcast_to`.
196
-
197
- You can now call `broadcast_to` within a channel action, which equals to
198
- the `self.class.broadcast_to`.
199
-
200
- *Vladimir Dementyev*
201
-
202
- * Make `Channel::Base.broadcasting_for` a public API.
203
-
204
- You can use `.broadcasting_for` to generate a unique stream identifier within
205
- a channel for the specified target (e.g. Active Record model):
206
-
207
- ```ruby
208
- ChatChannel.broadcasting_for(model) # => "chat:<model.to_gid_param>"
209
- ```
210
-
211
- *Vladimir Dementyev*
212
-
213
-
214
- ## Rails 6.0.0.beta1 (January 18, 2019) ##
215
-
216
- * [Rename npm package](https://github.com/rails/rails/pull/34905) from
217
- [`actioncable`](https://www.npmjs.com/package/actioncable) to
218
- [`@rails/actioncable`](https://www.npmjs.com/package/@rails/actioncable).
219
-
220
- *Javan Makhmali*
221
-
222
- * Merge [`action-cable-testing`](https://github.com/palkan/action-cable-testing) to Rails.
223
-
224
- *Vladimir Dementyev*
225
-
226
- * The JavaScript WebSocket client will no longer try to reconnect
227
- when you call `reject_unauthorized_connection` on the connection.
228
-
229
- *Mick Staugaard*
230
-
231
- * `ActionCable.Connection#getState` now references the configurable
232
- `ActionCable.adapters.WebSocket` property rather than the `WebSocket` global
233
- variable, matching the behavior of `ActionCable.Connection#open`.
234
-
235
- *Richard Macklin*
236
-
237
- * The ActionCable javascript package has been converted from CoffeeScript
238
- to ES2015, and we now publish the source code in the npm distribution.
239
-
240
- This allows ActionCable users to depend on the javascript source code
241
- rather than the compiled code, which can produce smaller javascript bundles.
242
-
243
- This change includes some breaking changes to optional parts of the
244
- ActionCable javascript API:
245
-
246
- - Configuration of the WebSocket adapter and logger adapter have been moved
247
- from properties of `ActionCable` to properties of `ActionCable.adapters`.
248
- If you are currently configuring these adapters you will need to make
249
- these changes when upgrading:
250
-
251
- ```diff
252
- - ActionCable.WebSocket = MyWebSocket
253
- + ActionCable.adapters.WebSocket = MyWebSocket
254
- ```
255
- ```diff
256
- - ActionCable.logger = myLogger
257
- + ActionCable.adapters.logger = myLogger
258
- ```
259
-
260
- - The `ActionCable.startDebugging()` and `ActionCable.stopDebugging()`
261
- methods have been removed and replaced with the property
262
- `ActionCable.logger.enabled`. If you are currently using these methods you
263
- will need to make these changes when upgrading:
264
-
265
- ```diff
266
- - ActionCable.startDebugging()
267
- + ActionCable.logger.enabled = true
268
- ```
269
- ```diff
270
- - ActionCable.stopDebugging()
271
- + ActionCable.logger.enabled = false
272
- ```
273
-
274
- *Richard Macklin*
275
-
276
- * Add `id` option to redis adapter so now you can distinguish
277
- ActionCable's redis connections among others. Also, you can set
278
- custom id in options.
279
-
280
- Before:
281
- ```
282
- $ redis-cli client list
283
- id=669 addr=127.0.0.1:46442 fd=8 name= age=18 ...
284
- ```
285
-
286
- After:
287
- ```
288
- $ redis-cli client list
289
- id=673 addr=127.0.0.1:46516 fd=8 name=ActionCable-PID-19413 age=2 ...
22
+ ```sql
23
+ SELECT application_name FROM pg_stat_activity;
24
+ /*
25
+ application_name
26
+ ------------------------
27
+ psql
28
+ ActionCable-PID-42
29
+ (2 rows)
30
+ */
290
31
  ```
291
32
 
292
- *Ilia Kasianenko*
33
+ *Sergey Ponomarev*
293
34
 
294
- * Rails 6 requires Ruby 2.5.0 or newer.
35
+ * Subscription confirmations and rejections are now logged at the `DEBUG` level instead of `INFO`.
295
36
 
296
- *Jeremy Daer*, *Kasper Timm Hansen*
37
+ *DHH*
297
38
 
298
39
 
299
- Please check [5-2-stable](https://github.com/rails/rails/blob/5-2-stable/actioncable/CHANGELOG.md) for previous changes.
40
+ Please check [6-0-stable](https://github.com/rails/rails/blob/6-0-stable/actioncable/CHANGELOG.md) for previous changes.
data/MIT-LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2015-2019 Basecamp, LLC
1
+ Copyright (c) 2015-2020 Basecamp, LLC
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
@@ -135,7 +135,7 @@
135
135
  if (document.visibilityState === "visible") {
136
136
  setTimeout(function() {
137
137
  if (_this2.connectionIsStale() || !_this2.connection.isOpen()) {
138
- logger.log("ConnectionMonitor reopening stale connection on visibilitychange. visbilityState = " + document.visibilityState);
138
+ logger.log("ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = " + document.visibilityState);
139
139
  _this2.connection.reopen();
140
140
  }
141
141
  }, 200);
@@ -194,7 +194,7 @@ module ActionCable
194
194
  end
195
195
 
196
196
  private
197
- # Called once a consumer has become a subscriber of the channel. Usually the place to setup any streams
197
+ # Called once a consumer has become a subscriber of the channel. Usually the place to set up any streams
198
198
  # you want this channel to be sending to the subscriber.
199
199
  def subscribed # :doc:
200
200
  # Override in subclasses
@@ -283,7 +283,7 @@ module ActionCable
283
283
 
284
284
  def transmit_subscription_confirmation
285
285
  unless subscription_confirmation_sent?
286
- logger.info "#{self.class.name} is transmitting the subscription confirmation"
286
+ logger.debug "#{self.class.name} is transmitting the subscription confirmation"
287
287
 
288
288
  ActiveSupport::Notifications.instrument("transmit_subscription_confirmation.action_cable", channel_class: self.class.name) do
289
289
  connection.transmit identifier: @identifier, type: ActionCable::INTERNAL[:message_types][:confirmation]
@@ -298,7 +298,7 @@ module ActionCable
298
298
  end
299
299
 
300
300
  def transmit_subscription_rejection
301
- logger.info "#{self.class.name} is transmitting the subscription rejection"
301
+ logger.debug "#{self.class.name} is transmitting the subscription rejection"
302
302
 
303
303
  ActiveSupport::Notifications.instrument("transmit_subscription_rejection.action_cable", channel_class: self.class.name) do
304
304
  connection.transmit identifier: @identifier, type: ActionCable::INTERNAL[:message_types][:rejection]
@@ -14,7 +14,7 @@ module ActionCable
14
14
  # Chats::AppearancesChannel.channel_name # => 'chats:appearances'
15
15
  # FooChats::BarAppearancesChannel.channel_name # => 'foo_chats:bar_appearances'
16
16
  def channel_name
17
- @channel_name ||= name.sub(/Channel$/, "").gsub("::", ":").underscore
17
+ @channel_name ||= name.delete_suffix("Channel").gsub("::", ":").underscore
18
18
  end
19
19
  end
20
20
 
@@ -82,7 +82,7 @@ module ActionCable
82
82
  # Build a stream handler by wrapping the user-provided callback with
83
83
  # a decoder or defaulting to a JSON-decoding retransmitter.
84
84
  handler = worker_pool_stream_handler(broadcasting, callback || block, coder: coder)
85
- streams << [ broadcasting, handler ]
85
+ streams[broadcasting] = handler
86
86
 
87
87
  connection.server.event_loop.post do
88
88
  pubsub.subscribe(broadcasting, handler, lambda do
@@ -102,6 +102,20 @@ module ActionCable
102
102
  stream_from(broadcasting_for(model), callback || block, coder: coder)
103
103
  end
104
104
 
105
+ # Unsubscribes streams from the named <tt>broadcasting</tt>.
106
+ def stop_stream_from(broadcasting)
107
+ callback = streams.delete(broadcasting)
108
+ if callback
109
+ pubsub.unsubscribe(broadcasting, callback)
110
+ logger.info "#{self.class.name} stopped streaming from #{broadcasting}"
111
+ end
112
+ end
113
+
114
+ # Unsubscribes streams for the <tt>model</tt>.
115
+ def stop_stream_for(model)
116
+ stop_stream_from(broadcasting_for(model))
117
+ end
118
+
105
119
  # Unsubscribes all streams associated with this channel from the pubsub queue.
106
120
  def stop_all_streams
107
121
  streams.each do |broadcasting, callback|
@@ -110,11 +124,23 @@ module ActionCable
110
124
  end.clear
111
125
  end
112
126
 
127
+ # Calls stream_for if record is present, otherwise calls reject.
128
+ # This method is intended to be called when you're looking
129
+ # for a record based on a parameter, if its found it will start
130
+ # streaming. If the record is nil then it will reject the connection.
131
+ def stream_or_reject_for(record)
132
+ if record
133
+ stream_for record
134
+ else
135
+ reject
136
+ end
137
+ end
138
+
113
139
  private
114
140
  delegate :pubsub, to: :connection
115
141
 
116
142
  def streams
117
- @_streams ||= []
143
+ @_streams ||= {}
118
144
  end
119
145
 
120
146
  # Always wrap the outermost handler to invoke the user handler on the
@@ -159,7 +159,7 @@ module ActionCable
159
159
  # def test_speak
160
160
  # subscribe room_id: rooms(:chat).id
161
161
  #
162
- # assert_broadcasts_on(rooms(:chat), text: "Hello, Rails!") do
162
+ # assert_broadcast_on(rooms(:chat), text: "Hello, Rails!") do
163
163
  # perform :speak, message: "Hello, Rails!"
164
164
  # end
165
165
  # end
@@ -209,7 +209,7 @@ module ActionCable
209
209
  end
210
210
  end
211
211
 
212
- # Setup test connection with the specified identifiers:
212
+ # Set up test connection with the specified identifiers:
213
213
  #
214
214
  # class ApplicationCable < ActionCable::Connection::Base
215
215
  # identified_by :user, :token
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "action_dispatch"
4
+ require "active_support/rescuable"
4
5
 
5
6
  module ActionCable
6
7
  module Connection
@@ -46,6 +47,7 @@ module ActionCable
46
47
  include Identification
47
48
  include InternalChannel
48
49
  include Authorization
50
+ include ActiveSupport::Rescuable
49
51
 
50
52
  attr_reader :server, :env, :subscriptions, :logger, :worker_pool, :protocol
51
53
  delegate :event_loop, :pubsub, to: :server
@@ -21,6 +21,7 @@ module ActionCable
21
21
  logger.error "Received unrecognized command in #{data.inspect}"
22
22
  end
23
23
  rescue Exception => e
24
+ @connection.rescue_with_handler(e)
24
25
  logger.error "Could not execute command from (#{data.inspect}) [#{e.class} - #{e.message}]: #{e.backtrace.first(5).join(" | ")}"
25
26
  end
26
27
 
@@ -85,7 +85,7 @@ module ActionCable
85
85
  # end
86
86
  # end
87
87
  #
88
- # +connect+ accepts additional information the HTTP request with the
88
+ # +connect+ accepts additional information about the HTTP request with the
89
89
  # +params+, +headers+, +session+ and Rack +env+ options.
90
90
  #
91
91
  # def test_connect_with_headers_and_query_string
@@ -101,7 +101,7 @@ module ActionCable
101
101
  # assert_equal "1", connection.user.id
102
102
  # end
103
103
  #
104
- # You can also setup the correct cookies before the connection request:
104
+ # You can also set up the correct cookies before the connection request:
105
105
  #
106
106
  # def test_connect_with_cookies
107
107
  # # Plain cookies:
@@ -8,9 +8,9 @@ module ActionCable
8
8
 
9
9
  module VERSION
10
10
  MAJOR = 6
11
- MINOR = 0
12
- TINY = 6
13
- PRE = "1"
11
+ MINOR = 1
12
+ TINY = 0
13
+ PRE = "rc1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -12,11 +12,11 @@ module ActionCable
12
12
  # </head>
13
13
  #
14
14
  # This is then used by Action Cable to determine the URL of your WebSocket server.
15
- # Your CoffeeScript can then connect to the server without needing to specify the
15
+ # Your JavaScript can then connect to the server without needing to specify the
16
16
  # URL directly:
17
17
  #
18
- # #= require cable
19
- # @App = {}
18
+ # window.Cable = require("@rails/actioncable")
19
+ # window.App = {}
20
20
  # App.cable = Cable.createConsumer()
21
21
  #
22
22
  # Make sure to specify the correct server location in each of your environment
@@ -27,7 +27,7 @@ module ActionCable
27
27
  @remote_connections = @event_loop = @worker_pool = @pubsub = nil
28
28
  end
29
29
 
30
- # Called by Rack to setup the server.
30
+ # Called by Rack to set up the server.
31
31
  def call(env)
32
32
  setup_heartbeat_timer
33
33
  config.connection_class.call.new(self, env).process
@@ -40,7 +40,7 @@ module ActionCable
40
40
  end
41
41
 
42
42
  def broadcast(message)
43
- server.logger.debug "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}"
43
+ server.logger.debug { "[ActionCable] Broadcasting to #{broadcasting}: #{message.inspect}" }
44
44
 
45
45
  payload = { broadcasting: broadcasting, message: message, coder: coder }
46
46
  ActiveSupport::Notifications.instrument("broadcast.action_cable", payload) do
@@ -2,6 +2,7 @@
2
2
 
3
3
  require "active_support/callbacks"
4
4
  require "active_support/core_ext/module/attribute_accessors_per_thread"
5
+ require "action_cable/server/worker/active_record_connection_management"
5
6
  require "concurrent"
6
7
 
7
8
  module ActionCable
@@ -11,7 +11,6 @@ module ActionCable
11
11
  autoload :Configuration
12
12
 
13
13
  autoload :Worker
14
- autoload :ActiveRecordConnectionManagement, "action_cable/server/worker/active_record_connection_management"
15
14
  end
16
15
  end
17
16
  end
@@ -25,6 +25,10 @@ module ActionCable
25
25
  def shutdown
26
26
  raise NotImplementedError
27
27
  end
28
+
29
+ def identifier
30
+ @server.config.cable[:id] ||= "ActionCable-PID-#{$$}"
31
+ end
28
32
  end
29
33
  end
30
34
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- gem "pg", ">= 0.18", "< 2.0"
3
+ gem "pg", "~> 1.1"
4
4
  require "pg"
5
5
  require "thread"
6
6
  require "digest/sha1"
@@ -42,6 +42,7 @@ module ActionCable
42
42
  pg_conn = ar_conn.raw_connection
43
43
 
44
44
  verify!(pg_conn)
45
+ pg_conn.exec("SET application_name = #{pg_conn.escape_identifier(identifier)}")
45
46
  yield pg_conn
46
47
  ensure
47
48
  ar_conn.disconnect!
@@ -15,7 +15,6 @@ module ActionCable
15
15
  # Overwrite this factory method for Redis connections if you want to use a different Redis library than the redis gem.
16
16
  # This is needed, for example, when using Makara proxies for distributed Redis.
17
17
  cattr_accessor :redis_connector, default: ->(config) do
18
- config[:id] ||= "ActionCable-PID-#{$$}"
19
18
  ::Redis.new(config.except(:adapter, :channel_prefix))
20
19
  end
21
20
 
@@ -57,7 +56,7 @@ module ActionCable
57
56
  end
58
57
 
59
58
  def redis_connection
60
- self.class.redis_connector.call(@server.config.cable)
59
+ self.class.redis_connector.call(@server.config.cable.merge(id: identifier))
61
60
  end
62
61
 
63
62
  class Listener < SubscriberMap
@@ -42,10 +42,10 @@ module ActionCable
42
42
  # end
43
43
  # end
44
44
  #
45
- def assert_broadcasts(stream, number)
45
+ def assert_broadcasts(stream, number, &block)
46
46
  if block_given?
47
47
  original_count = broadcasts_size(stream)
48
- yield
48
+ assert_nothing_raised(&block)
49
49
  new_count = broadcasts_size(stream)
50
50
  actual_count = new_count - original_count
51
51
  else
@@ -94,7 +94,7 @@ module ActionCable
94
94
  # end
95
95
  # end
96
96
  #
97
- def assert_broadcast_on(stream, data)
97
+ def assert_broadcast_on(stream, data, &block)
98
98
  # Encode to JSON and back–we want to use this value to compare
99
99
  # with decoded JSON.
100
100
  # Comparing JSON strings doesn't work due to the order if the keys.
@@ -106,7 +106,7 @@ module ActionCable
106
106
  old_messages = new_messages
107
107
  clear_messages(stream)
108
108
 
109
- yield
109
+ assert_nothing_raised(&block)
110
110
  new_messages = broadcasts(stream)
111
111
  clear_messages(stream)
112
112
 
data/lib/action_cable.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #--
4
- # Copyright (c) 2015-2019 Basecamp, LLC
4
+ # Copyright (c) 2015-2020 Basecamp, LLC
5
5
  #
6
6
  # Permission is hereby granted, free of charge, to any person obtaining
7
7
  # a copy of this software and associated documentation files (the
@@ -1,11 +1,11 @@
1
1
  Description:
2
2
  ============
3
- Stubs out a new cable channel for the server (in Ruby) and client (in JavaScript).
3
+ Generates a new cable channel for the server (in Ruby) and client (in JavaScript).
4
4
  Pass the channel name, either CamelCased or under_scored, and an optional list of channel actions as arguments.
5
5
 
6
6
  Example:
7
7
  ========
8
- rails generate channel Chat speak
8
+ bin/rails generate channel Chat speak
9
9
 
10
10
  creates a Chat channel class, test and JavaScript asset:
11
11
  Channel: app/channels/chat_channel.rb
@@ -1,5 +1,5 @@
1
1
  // Action Cable provides the framework to deal with WebSockets in Rails.
2
- // You can generate new channels where WebSocket features live using the `rails generate channel` command.
2
+ // You can generate new channels where WebSocket features live using the `bin/rails generate channel` command.
3
3
 
4
4
  import { createConsumer } from "@rails/actioncable"
5
5
 
metadata CHANGED
@@ -1,30 +1,44 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: actioncable
3
3
  version: !ruby/object:Gem::Version
4
- version: 6.0.6.1
4
+ version: 6.1.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pratik Naik
8
8
  - David Heinemeier Hansson
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-01-17 00:00:00.000000000 Z
12
+ date: 2020-11-02 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '='
19
+ - !ruby/object:Gem::Version
20
+ version: 6.1.0.rc1
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '='
26
+ - !ruby/object:Gem::Version
27
+ version: 6.1.0.rc1
14
28
  - !ruby/object:Gem::Dependency
15
29
  name: actionpack
16
30
  requirement: !ruby/object:Gem::Requirement
17
31
  requirements:
18
32
  - - '='
19
33
  - !ruby/object:Gem::Version
20
- version: 6.0.6.1
34
+ version: 6.1.0.rc1
21
35
  type: :runtime
22
36
  prerelease: false
23
37
  version_requirements: !ruby/object:Gem::Requirement
24
38
  requirements:
25
39
  - - '='
26
40
  - !ruby/object:Gem::Version
27
- version: 6.0.6.1
41
+ version: 6.1.0.rc1
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: nio4r
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -126,12 +140,11 @@ licenses:
126
140
  - MIT
127
141
  metadata:
128
142
  bug_tracker_uri: https://github.com/rails/rails/issues
129
- changelog_uri: https://github.com/rails/rails/blob/v6.0.6.1/actioncable/CHANGELOG.md
130
- documentation_uri: https://api.rubyonrails.org/v6.0.6.1/
143
+ changelog_uri: https://github.com/rails/rails/blob/v6.1.0.rc1/actioncable/CHANGELOG.md
144
+ documentation_uri: https://api.rubyonrails.org/v6.1.0.rc1/
131
145
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
132
- source_code_uri: https://github.com/rails/rails/tree/v6.0.6.1/actioncable
133
- rubygems_mfa_required: 'true'
134
- post_install_message:
146
+ source_code_uri: https://github.com/rails/rails/tree/v6.1.0.rc1/actioncable
147
+ post_install_message:
135
148
  rdoc_options: []
136
149
  require_paths:
137
150
  - lib
@@ -142,12 +155,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
142
155
  version: 2.5.0
143
156
  required_rubygems_version: !ruby/object:Gem::Requirement
144
157
  requirements:
145
- - - ">="
158
+ - - ">"
146
159
  - !ruby/object:Gem::Version
147
- version: '0'
160
+ version: 1.3.1
148
161
  requirements: []
149
- rubygems_version: 3.4.3
150
- signing_key:
162
+ rubygems_version: 3.1.4
163
+ signing_key:
151
164
  specification_version: 4
152
165
  summary: WebSocket framework for Rails.
153
166
  test_files: []