actioncable 6.0.3.2 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d27d81de1541f7707f195bfda59ad38a7bb1acf92435b2edf25c717b7ec1a6be
4
- data.tar.gz: 0f6e006c0c1da948243fe4a9eb0a753de89ccd6af289e86614b1243f3e28649e
3
+ metadata.gz: 59bef404a4c31bcb6da1903795be75902646af4468963a915efca79d8f1d691d
4
+ data.tar.gz: 776494689acd4385eec48aa45e545f3626fb11f0c2f1a10a17c7b61527be9e26
5
5
  SHA512:
6
- metadata.gz: 90e5f1776706f6ca172aa39bca5e9339994ae0093ee4d4c0274a02e7838c680f27043aeeee6f87b76b65c1792d06e65dbba903b0ad09c2d83b235a9bff71c328
7
- data.tar.gz: 5e8a7d8da3e81b52de3c1379acaa94292c1e3b8a73c9303ebd0c8c9e84b016a640059ec144f1a336d0a70cb4ffb9dcb9da414267c5a7aa38012d5ce80965092a
6
+ metadata.gz: 547d85c171fa187c290f946db4cb51378fc31b03a2815d800425e5a7ff03764f9bf225a7ef6c8e244b830a6775bde0ef4f521612b1205d89b7c5c3fd4564c647
7
+ data.tar.gz: e7c11e3ffc454eea00923b1bfff2e8cb85d65cc5ecb1162d395573bbf393ed38f2799d646f2f3b6437b0e12ec1025972b1951f0c572bb333d8252e03ed64058f
@@ -1,204 +1,40 @@
1
- ## Rails 6.0.3.2 (June 17, 2020) ##
1
+ ## Rails 6.1.0 (December 09, 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.3.1 (May 18, 2020) ##
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.3 (May 06, 2020) ##
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.2.2 (March 19, 2020) ##
17
-
18
- * No changes.
19
-
20
-
21
- ## Rails 6.0.2.1 (December 18, 2019) ##
22
-
23
- * No changes.
24
-
25
-
26
- ## Rails 6.0.2 (December 13, 2019) ##
27
-
28
- * No changes.
29
-
30
-
31
- ## Rails 6.0.1 (November 5, 2019) ##
32
-
33
- * No changes.
34
-
35
-
36
- ## Rails 6.0.0 (August 16, 2019) ##
37
-
38
- * No changes.
39
-
40
-
41
- ## Rails 6.0.0.rc2 (July 22, 2019) ##
42
-
43
- * No changes.
44
-
45
-
46
- ## Rails 6.0.0.rc1 (April 24, 2019) ##
47
-
48
- * No changes.
49
-
50
-
51
- ## Rails 6.0.0.beta3 (March 11, 2019) ##
52
-
53
- * No changes.
54
-
55
-
56
- ## Rails 6.0.0.beta2 (February 25, 2019) ##
57
-
58
- * PostgreSQL subscription adapters now support `channel_prefix` option in cable.yml
59
-
60
- Avoids channel name collisions when multiple apps use the same database for Action Cable.
61
-
62
- *Vladimir Dementyev*
63
-
64
- * Allow passing custom configuration to `ActionCable::Server::Base`.
65
-
66
- You can now create a standalone Action Cable server with a custom configuration
67
- (e.g. to run it in isolation from the default one):
68
-
69
- ```ruby
70
- config = ActionCable::Server::Configuration.new
71
- config.cable = { adapter: "redis", channel_prefix: "custom_" }
72
-
73
- CUSTOM_CABLE = ActionCable::Server::Base.new(config: config)
74
- ```
75
-
76
- Then you can mount it in the `routes.rb` file:
77
-
78
- ```ruby
79
- Rails.application.routes.draw do
80
- mount CUSTOM_CABLE => "/custom_cable"
81
- # ...
82
- end
83
- ```
84
-
85
- *Vladimir Dementyev*
86
-
87
- * Add `:action_cable_connection` and `:action_cable_channel` load hooks.
88
-
89
- You can use them to extend `ActionCable::Connection::Base` and `ActionCable::Channel::Base`
90
- functionality:
91
-
92
- ```ruby
93
- ActiveSupport.on_load(:action_cable_channel) do
94
- # do something in the context of ActionCable::Channel::Base
95
- end
96
- ```
97
-
98
- *Vladimir Dementyev*
99
-
100
- * Add `Channel::Base#broadcast_to`.
101
-
102
- You can now call `broadcast_to` within a channel action, which equals to
103
- the `self.class.broadcast_to`.
104
-
105
- *Vladimir Dementyev*
106
-
107
- * Make `Channel::Base.broadcasting_for` a public API.
108
-
109
- You can use `.broadcasting_for` to generate a unique stream identifier within
110
- a channel for the specified target (e.g. Active Record model):
111
-
112
- ```ruby
113
- ChatChannel.broadcasting_for(model) # => "chat:<model.to_gid_param>"
114
- ```
115
-
116
- *Vladimir Dementyev*
117
-
118
-
119
- ## Rails 6.0.0.beta1 (January 18, 2019) ##
120
-
121
- * [Rename npm package](https://github.com/rails/rails/pull/34905) from
122
- [`actioncable`](https://www.npmjs.com/package/actioncable) to
123
- [`@rails/actioncable`](https://www.npmjs.com/package/@rails/actioncable).
124
-
125
- *Javan Makhmali*
126
-
127
- * Merge [`action-cable-testing`](https://github.com/palkan/action-cable-testing) to Rails.
128
-
129
- *Vladimir Dementyev*
130
-
131
- * The JavaScript WebSocket client will no longer try to reconnect
132
- when you call `reject_unauthorized_connection` on the connection.
133
-
134
- *Mick Staugaard*
135
-
136
- * `ActionCable.Connection#getState` now references the configurable
137
- `ActionCable.adapters.WebSocket` property rather than the `WebSocket` global
138
- variable, matching the behavior of `ActionCable.Connection#open`.
139
-
140
- *Richard Macklin*
141
-
142
- * The ActionCable javascript package has been converted from CoffeeScript
143
- to ES2015, and we now publish the source code in the npm distribution.
144
-
145
- This allows ActionCable users to depend on the javascript source code
146
- rather than the compiled code, which can produce smaller javascript bundles.
147
-
148
- This change includes some breaking changes to optional parts of the
149
- ActionCable javascript API:
150
-
151
- - Configuration of the WebSocket adapter and logger adapter have been moved
152
- from properties of `ActionCable` to properties of `ActionCable.adapters`.
153
- If you are currently configuring these adapters you will need to make
154
- these changes when upgrading:
155
-
156
- ```diff
157
- - ActionCable.WebSocket = MyWebSocket
158
- + ActionCable.adapters.WebSocket = MyWebSocket
159
- ```
160
- ```diff
161
- - ActionCable.logger = myLogger
162
- + ActionCable.adapters.logger = myLogger
163
- ```
164
-
165
- - The `ActionCable.startDebugging()` and `ActionCable.stopDebugging()`
166
- methods have been removed and replaced with the property
167
- `ActionCable.logger.enabled`. If you are currently using these methods you
168
- will need to make these changes when upgrading:
169
-
170
- ```diff
171
- - ActionCable.startDebugging()
172
- + ActionCable.logger.enabled = true
173
- ```
174
- ```diff
175
- - ActionCable.stopDebugging()
176
- + ActionCable.logger.enabled = false
177
- ```
178
-
179
- *Richard Macklin*
180
-
181
- * Add `id` option to redis adapter so now you can distinguish
182
- ActionCable's redis connections among others. Also, you can set
183
- custom id in options.
184
-
185
- Before:
186
- ```
187
- $ redis-cli client list
188
- id=669 addr=127.0.0.1:46442 fd=8 name= age=18 ...
189
- ```
190
-
191
- After:
192
- ```
193
- $ redis-cli client list
194
- 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
+ */
195
31
  ```
196
32
 
197
- *Ilia Kasianenko*
33
+ *Sergey Ponomarev*
198
34
 
199
- * Rails 6 requires Ruby 2.5.0 or newer.
35
+ * Subscription confirmations and rejections are now logged at the `DEBUG` level instead of `INFO`.
200
36
 
201
- *Jeremy Daer*, *Kasper Timm Hansen*
37
+ *DHH*
202
38
 
203
39
 
204
- 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.
@@ -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);
@@ -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
@@ -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:
@@ -30,7 +30,7 @@ module ActionCable
30
30
 
31
31
  ActiveSupport.on_load(:action_cable) do
32
32
  if (config_path = Pathname.new(app.config.paths["config/cable"].first)).exist?
33
- self.cable = Rails.application.config_for(config_path).with_indifferent_access
33
+ self.cable = Rails.application.config_for(config_path).to_h.with_indifferent_access
34
34
  end
35
35
 
36
36
  previous_connection_class = connection_class
@@ -8,9 +8,9 @@ module ActionCable
8
8
 
9
9
  module VERSION
10
10
  MAJOR = 6
11
- MINOR = 0
12
- TINY = 3
13
- PRE = "2"
11
+ MINOR = 1
12
+ TINY = 0
13
+ PRE = nil
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
@@ -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
@@ -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
@@ -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
 
@@ -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.3.2
4
+ version: 6.1.0
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: 2020-06-17 00:00:00.000000000 Z
12
+ date: 2020-12-09 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
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
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.3.2
34
+ version: 6.1.0
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.3.2
41
+ version: 6.1.0
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.3.2/actioncable/CHANGELOG.md
130
- documentation_uri: https://api.rubyonrails.org/v6.0.3.2/
143
+ changelog_uri: https://github.com/rails/rails/blob/v6.1.0/actioncable/CHANGELOG.md
144
+ documentation_uri: https://api.rubyonrails.org/v6.1.0/
131
145
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
132
- source_code_uri: https://github.com/rails/rails/tree/v6.0.3.2/actioncable
133
- post_install_message:
146
+ source_code_uri: https://github.com/rails/rails/tree/v6.1.0/actioncable
147
+ post_install_message:
134
148
  rdoc_options: []
135
149
  require_paths:
136
150
  - lib
@@ -145,8 +159,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
159
  - !ruby/object:Gem::Version
146
160
  version: '0'
147
161
  requirements: []
148
- rubygems_version: 3.1.2
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: []