actioncable 6.0.4.7 → 6.1.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -259
- data/MIT-LICENSE +1 -1
- data/app/assets/javascripts/action_cable.js +1 -1
- data/lib/action_cable/channel/base.rb +3 -3
- data/lib/action_cable/channel/naming.rb +1 -1
- data/lib/action_cable/channel/streams.rb +28 -2
- data/lib/action_cable/channel/test_case.rb +2 -2
- data/lib/action_cable/connection/base.rb +2 -0
- data/lib/action_cable/connection/subscriptions.rb +1 -0
- data/lib/action_cable/connection/test_case.rb +2 -2
- data/lib/action_cable/gem_version.rb +3 -3
- data/lib/action_cable/helpers/action_cable_helper.rb +3 -3
- data/lib/action_cable/server/base.rb +1 -1
- data/lib/action_cable/server/broadcasting.rb +1 -1
- data/lib/action_cable/server/worker.rb +1 -0
- data/lib/action_cable/server.rb +0 -1
- data/lib/action_cable/subscription_adapter/base.rb +4 -0
- data/lib/action_cable/subscription_adapter/postgresql.rb +2 -1
- data/lib/action_cable/subscription_adapter/redis.rb +1 -2
- data/lib/action_cable/test_helper.rb +4 -4
- data/lib/action_cable.rb +1 -1
- data/lib/rails/generators/channel/USAGE +2 -2
- data/lib/rails/generators/channel/templates/javascript/consumer.js.tt +1 -1
- metadata +27 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '092e0f4da989f896c2b9926bde6aba57287b719f59a31eb9d6e50447547c14f9'
|
4
|
+
data.tar.gz: bc103b20688523c1d869c08ba8b7a211b30e01f8e8b46f545a3c4f8dcbbe09d2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 923749293a1a29b9d75507a0558c755c737b12a595f0e33ca81e5e39b415dedc63fb8b93e40be99e50877d6470312cad3adf0e303e5652864aa6bcf159a9fbca
|
7
|
+
data.tar.gz: 533a1cf1c47f07c9d6f9044e5ad5f6a78ed78a2ec5daf29d0de51b63d5f2d8bbeff46355ddc4ff0466d8a3d91d6da5d29818a5142f0a669032dad85455d403ab
|
data/CHANGELOG.md
CHANGED
@@ -1,274 +1,40 @@
|
|
1
|
-
## Rails 6.0.
|
1
|
+
## Rails 6.1.0.rc1 (November 02, 2020) ##
|
2
2
|
|
3
|
-
*
|
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
|
-
|
9
|
+
* Add `ActionCable::Channel#stream_or_reject_for` to stream if record is present, otherwise reject the connection
|
7
10
|
|
8
|
-
*
|
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
|
-
|
15
|
+
*Zhang Kang*
|
12
16
|
|
13
|
-
*
|
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
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
## Rails 6.0.4.2 (December 14, 2021) ##
|
27
|
-
|
28
|
-
* No changes.
|
29
|
-
|
30
|
-
|
31
|
-
## Rails 6.0.4.1 (August 19, 2021) ##
|
32
|
-
|
33
|
-
* No changes.
|
34
|
-
|
35
|
-
|
36
|
-
## Rails 6.0.4 (June 15, 2021) ##
|
37
|
-
|
38
|
-
* No changes.
|
39
|
-
|
40
|
-
|
41
|
-
## Rails 6.0.3.7 (May 05, 2021) ##
|
42
|
-
|
43
|
-
* No changes.
|
44
|
-
|
45
|
-
|
46
|
-
## Rails 6.0.3.6 (May 04, 2021) ##
|
47
|
-
|
48
|
-
* No changes.
|
49
|
-
|
50
|
-
|
51
|
-
## Rails 6.0.3.6 (March 26, 2021) ##
|
52
|
-
|
53
|
-
* No changes.
|
54
|
-
|
55
|
-
|
56
|
-
## Rails 6.0.3.5 (February 10, 2021) ##
|
57
|
-
|
58
|
-
* No changes.
|
59
|
-
|
60
|
-
|
61
|
-
## Rails 6.0.3.4 (October 07, 2020) ##
|
62
|
-
|
63
|
-
* No changes.
|
64
|
-
|
65
|
-
|
66
|
-
## Rails 6.0.3.3 (September 09, 2020) ##
|
67
|
-
|
68
|
-
* No changes.
|
69
|
-
|
70
|
-
|
71
|
-
## Rails 6.0.3.2 (June 17, 2020) ##
|
72
|
-
|
73
|
-
* No changes.
|
74
|
-
|
75
|
-
|
76
|
-
## Rails 6.0.3.1 (May 18, 2020) ##
|
77
|
-
|
78
|
-
* No changes.
|
79
|
-
|
80
|
-
|
81
|
-
## Rails 6.0.3 (May 06, 2020) ##
|
82
|
-
|
83
|
-
* No changes.
|
84
|
-
|
85
|
-
|
86
|
-
## Rails 6.0.2.2 (March 19, 2020) ##
|
87
|
-
|
88
|
-
* No changes.
|
89
|
-
|
90
|
-
|
91
|
-
## Rails 6.0.2.1 (December 18, 2019) ##
|
92
|
-
|
93
|
-
* No changes.
|
94
|
-
|
95
|
-
|
96
|
-
## Rails 6.0.2 (December 13, 2019) ##
|
97
|
-
|
98
|
-
* No changes.
|
99
|
-
|
100
|
-
|
101
|
-
## Rails 6.0.1 (November 5, 2019) ##
|
102
|
-
|
103
|
-
* No changes.
|
104
|
-
|
105
|
-
|
106
|
-
## Rails 6.0.0 (August 16, 2019) ##
|
107
|
-
|
108
|
-
* No changes.
|
109
|
-
|
110
|
-
|
111
|
-
## Rails 6.0.0.rc2 (July 22, 2019) ##
|
112
|
-
|
113
|
-
* No changes.
|
114
|
-
|
115
|
-
|
116
|
-
## Rails 6.0.0.rc1 (April 24, 2019) ##
|
117
|
-
|
118
|
-
* No changes.
|
119
|
-
|
120
|
-
|
121
|
-
## Rails 6.0.0.beta3 (March 11, 2019) ##
|
122
|
-
|
123
|
-
* No changes.
|
124
|
-
|
125
|
-
|
126
|
-
## Rails 6.0.0.beta2 (February 25, 2019) ##
|
127
|
-
|
128
|
-
* PostgreSQL subscription adapters now support `channel_prefix` option in cable.yml
|
129
|
-
|
130
|
-
Avoids channel name collisions when multiple apps use the same database for Action Cable.
|
131
|
-
|
132
|
-
*Vladimir Dementyev*
|
133
|
-
|
134
|
-
* Allow passing custom configuration to `ActionCable::Server::Base`.
|
135
|
-
|
136
|
-
You can now create a standalone Action Cable server with a custom configuration
|
137
|
-
(e.g. to run it in isolation from the default one):
|
138
|
-
|
139
|
-
```ruby
|
140
|
-
config = ActionCable::Server::Configuration.new
|
141
|
-
config.cable = { adapter: "redis", channel_prefix: "custom_" }
|
142
|
-
|
143
|
-
CUSTOM_CABLE = ActionCable::Server::Base.new(config: config)
|
144
|
-
```
|
145
|
-
|
146
|
-
Then you can mount it in the `routes.rb` file:
|
147
|
-
|
148
|
-
```ruby
|
149
|
-
Rails.application.routes.draw do
|
150
|
-
mount CUSTOM_CABLE => "/custom_cable"
|
151
|
-
# ...
|
152
|
-
end
|
153
|
-
```
|
154
|
-
|
155
|
-
*Vladimir Dementyev*
|
156
|
-
|
157
|
-
* Add `:action_cable_connection` and `:action_cable_channel` load hooks.
|
158
|
-
|
159
|
-
You can use them to extend `ActionCable::Connection::Base` and `ActionCable::Channel::Base`
|
160
|
-
functionality:
|
161
|
-
|
162
|
-
```ruby
|
163
|
-
ActiveSupport.on_load(:action_cable_channel) do
|
164
|
-
# do something in the context of ActionCable::Channel::Base
|
165
|
-
end
|
166
|
-
```
|
167
|
-
|
168
|
-
*Vladimir Dementyev*
|
169
|
-
|
170
|
-
* Add `Channel::Base#broadcast_to`.
|
171
|
-
|
172
|
-
You can now call `broadcast_to` within a channel action, which equals to
|
173
|
-
the `self.class.broadcast_to`.
|
174
|
-
|
175
|
-
*Vladimir Dementyev*
|
176
|
-
|
177
|
-
* Make `Channel::Base.broadcasting_for` a public API.
|
178
|
-
|
179
|
-
You can use `.broadcasting_for` to generate a unique stream identifier within
|
180
|
-
a channel for the specified target (e.g. Active Record model):
|
181
|
-
|
182
|
-
```ruby
|
183
|
-
ChatChannel.broadcasting_for(model) # => "chat:<model.to_gid_param>"
|
184
|
-
```
|
185
|
-
|
186
|
-
*Vladimir Dementyev*
|
187
|
-
|
188
|
-
|
189
|
-
## Rails 6.0.0.beta1 (January 18, 2019) ##
|
190
|
-
|
191
|
-
* [Rename npm package](https://github.com/rails/rails/pull/34905) from
|
192
|
-
[`actioncable`](https://www.npmjs.com/package/actioncable) to
|
193
|
-
[`@rails/actioncable`](https://www.npmjs.com/package/@rails/actioncable).
|
194
|
-
|
195
|
-
*Javan Makhmali*
|
196
|
-
|
197
|
-
* Merge [`action-cable-testing`](https://github.com/palkan/action-cable-testing) to Rails.
|
198
|
-
|
199
|
-
*Vladimir Dementyev*
|
200
|
-
|
201
|
-
* The JavaScript WebSocket client will no longer try to reconnect
|
202
|
-
when you call `reject_unauthorized_connection` on the connection.
|
203
|
-
|
204
|
-
*Mick Staugaard*
|
205
|
-
|
206
|
-
* `ActionCable.Connection#getState` now references the configurable
|
207
|
-
`ActionCable.adapters.WebSocket` property rather than the `WebSocket` global
|
208
|
-
variable, matching the behavior of `ActionCable.Connection#open`.
|
209
|
-
|
210
|
-
*Richard Macklin*
|
211
|
-
|
212
|
-
* The ActionCable javascript package has been converted from CoffeeScript
|
213
|
-
to ES2015, and we now publish the source code in the npm distribution.
|
214
|
-
|
215
|
-
This allows ActionCable users to depend on the javascript source code
|
216
|
-
rather than the compiled code, which can produce smaller javascript bundles.
|
217
|
-
|
218
|
-
This change includes some breaking changes to optional parts of the
|
219
|
-
ActionCable javascript API:
|
220
|
-
|
221
|
-
- Configuration of the WebSocket adapter and logger adapter have been moved
|
222
|
-
from properties of `ActionCable` to properties of `ActionCable.adapters`.
|
223
|
-
If you are currently configuring these adapters you will need to make
|
224
|
-
these changes when upgrading:
|
225
|
-
|
226
|
-
```diff
|
227
|
-
- ActionCable.WebSocket = MyWebSocket
|
228
|
-
+ ActionCable.adapters.WebSocket = MyWebSocket
|
229
|
-
```
|
230
|
-
```diff
|
231
|
-
- ActionCable.logger = myLogger
|
232
|
-
+ ActionCable.adapters.logger = myLogger
|
233
|
-
```
|
234
|
-
|
235
|
-
- The `ActionCable.startDebugging()` and `ActionCable.stopDebugging()`
|
236
|
-
methods have been removed and replaced with the property
|
237
|
-
`ActionCable.logger.enabled`. If you are currently using these methods you
|
238
|
-
will need to make these changes when upgrading:
|
239
|
-
|
240
|
-
```diff
|
241
|
-
- ActionCable.startDebugging()
|
242
|
-
+ ActionCable.logger.enabled = true
|
243
|
-
```
|
244
|
-
```diff
|
245
|
-
- ActionCable.stopDebugging()
|
246
|
-
+ ActionCable.logger.enabled = false
|
247
|
-
```
|
248
|
-
|
249
|
-
*Richard Macklin*
|
250
|
-
|
251
|
-
* Add `id` option to redis adapter so now you can distinguish
|
252
|
-
ActionCable's redis connections among others. Also, you can set
|
253
|
-
custom id in options.
|
254
|
-
|
255
|
-
Before:
|
256
|
-
```
|
257
|
-
$ redis-cli client list
|
258
|
-
id=669 addr=127.0.0.1:46442 fd=8 name= age=18 ...
|
259
|
-
```
|
260
|
-
|
261
|
-
After:
|
262
|
-
```
|
263
|
-
$ redis-cli client list
|
264
|
-
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
|
+
*/
|
265
31
|
```
|
266
32
|
|
267
|
-
*
|
33
|
+
*Sergey Ponomarev*
|
268
34
|
|
269
|
-
*
|
35
|
+
* Subscription confirmations and rejections are now logged at the `DEBUG` level instead of `INFO`.
|
270
36
|
|
271
|
-
*
|
37
|
+
*DHH*
|
272
38
|
|
273
39
|
|
274
|
-
Please check [
|
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
@@ -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.
|
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
|
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.
|
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.
|
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.
|
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
|
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
|
-
#
|
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
|
-
#
|
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
|
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:
|
@@ -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
|
15
|
+
# Your JavaScript can then connect to the server without needing to specify the
|
16
16
|
# URL directly:
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
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
|
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
|
data/lib/action_cable/server.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
gem "pg", "
|
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
|
-
|
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
|
-
|
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-
|
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
|
-
|
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.
|
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:
|
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.
|
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.
|
41
|
+
version: 6.1.0.rc1
|
28
42
|
- !ruby/object:Gem::Dependency
|
29
43
|
name: nio4r
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,11 +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.
|
130
|
-
documentation_uri: https://api.rubyonrails.org/v6.0.
|
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.
|
133
|
-
post_install_message:
|
146
|
+
source_code_uri: https://github.com/rails/rails/tree/v6.1.0.rc1/actioncable
|
147
|
+
post_install_message:
|
134
148
|
rdoc_options: []
|
135
149
|
require_paths:
|
136
150
|
- lib
|
@@ -141,12 +155,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
141
155
|
version: 2.5.0
|
142
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
157
|
requirements:
|
144
|
-
- - "
|
158
|
+
- - ">"
|
145
159
|
- !ruby/object:Gem::Version
|
146
|
-
version:
|
160
|
+
version: 1.3.1
|
147
161
|
requirements: []
|
148
|
-
rubygems_version: 3.1.
|
149
|
-
signing_key:
|
162
|
+
rubygems_version: 3.1.4
|
163
|
+
signing_key:
|
150
164
|
specification_version: 4
|
151
165
|
summary: WebSocket framework for Rails.
|
152
166
|
test_files: []
|