actioncable 7.0.2.3 → 7.0.4

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: eddb48f29e88cfe9ca281b88081ed536b7323581948598798ce05d47f898d8c5
4
- data.tar.gz: 45cc48678497cd162b73f58a4deb892e4cd62c0d025972934a3e6b65a6764211
3
+ metadata.gz: 51532672c5293e1ac4ffdf854f4ee41de231ef843e6ddbc51a20fdede0e029e5
4
+ data.tar.gz: f5324ae765aa6bcdc65590be2f2ad0c034e9b1a58d318a4f27e9e9f7e6ffd3c1
5
5
  SHA512:
6
- metadata.gz: f79ef6e220b03e19faf30c2c2143adf00dd12c1cb5589c02b22ebe1c01fec1a66c01edbb9e92338dea96e08316f45152dafae842fc88b43386c0688ffd51aa35
7
- data.tar.gz: bd1e34eed0b3ffbe5bc0dacbf2472506cb5fb2ad810b34add58ab857b24d5dc586ca786549983dca06732576b40c6f9411c5b00b6ebc8e4367d1e50ec761c84a
6
+ metadata.gz: 6084037b957593e0e31cdf7c55030f9f2921d03a93b01f0bdb54f2460936909667350edba98b10e287a3563bd39231606abf1f575f45ee47b603d748ef48a072
7
+ data.tar.gz: c2457611b9b2694955a9613fc27211e34e4d7b4b0d98b084eca9e1b0052f6ccbbfdacd0133d6b0da2eb1bed895c7a18bfe32ae5dfac167c4725bb8b45dcd6bf9
data/CHANGELOG.md CHANGED
@@ -1,3 +1,33 @@
1
+ ## Rails 7.0.4 (September 09, 2022) ##
2
+
3
+ * The Redis adapter is now compatible with redis-rb 5.0
4
+
5
+ Compatibility with redis-rb 3.x was dropped.
6
+
7
+ *Jean Boussier*
8
+
9
+ * The Action Cable server is now mounted with `anchor: true`.
10
+
11
+ This means that routes that also start with `/cable` will no longer clash with Action Cable.
12
+
13
+ *Alex Ghiculescu*
14
+
15
+
16
+ ## Rails 7.0.3.1 (July 12, 2022) ##
17
+
18
+ * No changes.
19
+
20
+
21
+ ## Rails 7.0.3 (May 09, 2022) ##
22
+
23
+ * No changes.
24
+
25
+
26
+ ## Rails 7.0.2.4 (April 26, 2022) ##
27
+
28
+ * No changes.
29
+
30
+
1
31
  ## Rails 7.0.2.3 (March 08, 2022) ##
2
32
 
3
33
  * No changes.
@@ -166,7 +166,7 @@
166
166
  if (!allowReconnect) {
167
167
  this.monitor.stop();
168
168
  }
169
- if (this.isActive()) {
169
+ if (this.isOpen()) {
170
170
  return this.webSocket.close();
171
171
  }
172
172
  }
@@ -172,7 +172,7 @@ class Connection {
172
172
  if (!allowReconnect) {
173
173
  this.monitor.stop();
174
174
  }
175
- if (this.isActive()) {
175
+ if (this.isOpen()) {
176
176
  return this.webSocket.close();
177
177
  }
178
178
  }
@@ -166,7 +166,7 @@
166
166
  if (!allowReconnect) {
167
167
  this.monitor.stop();
168
168
  }
169
- if (this.isActive()) {
169
+ if (this.isOpen()) {
170
170
  return this.webSocket.close();
171
171
  }
172
172
  }
@@ -186,7 +186,7 @@ module ActionCable
186
186
  end
187
187
 
188
188
  # Called by the cable connection when it's cut, so the channel has a chance to cleanup with callbacks.
189
- # This method is not intended to be called directly by the user. Instead, overwrite the #unsubscribed callback.
189
+ # This method is not intended to be called directly by the user. Instead, override the #unsubscribed callback.
190
190
  def unsubscribe_from_channel # :nodoc:
191
191
  run_callbacks :unsubscribe do
192
192
  unsubscribed
@@ -18,7 +18,7 @@ module ActionCable
18
18
  end
19
19
  end
20
20
 
21
- # Delegates to the class' <tt>channel_name</tt>
21
+ # Delegates to the class's ::channel_name.
22
22
  delegate :channel_name, to: :class
23
23
  end
24
24
  end
@@ -3,7 +3,7 @@
3
3
  module ActionCable
4
4
  module Connection
5
5
  # Allows the use of per-connection tags against the server logger. This wouldn't work using the traditional
6
- # <tt>ActiveSupport::TaggedLogging</tt> enhanced Rails.logger, as that logger will reset the tags between requests.
6
+ # ActiveSupport::TaggedLogging enhanced Rails.logger, as that logger will reset the tags between requests.
7
7
  # The connection is long-lived, so it needs its own set of tags for its independent duration.
8
8
  class TaggedLoggerProxy
9
9
  attr_reader :tags
@@ -86,7 +86,7 @@ module ActionCable
86
86
  # end
87
87
  #
88
88
  # +connect+ accepts additional information about the HTTP request with the
89
- # +params+, +headers+, +session+ and Rack +env+ options.
89
+ # +params+, +headers+, +session+, and Rack +env+ options.
90
90
  #
91
91
  # def test_connect_with_headers_and_query_string
92
92
  # connect params: { user_id: 1 }, headers: { "X-API-TOKEN" => "secret-my" }
@@ -54,7 +54,7 @@ module ActionCable
54
54
  config = app.config
55
55
  unless config.action_cable.mount_path.nil?
56
56
  app.routes.prepend do
57
- mount ActionCable.server => config.action_cable.mount_path, internal: true
57
+ mount ActionCable.server => config.action_cable.mount_path, internal: true, anchor: true
58
58
  end
59
59
  end
60
60
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActionCable
4
- # Returns the version of the currently loaded Action Cable as a <tt>Gem::Version</tt>.
4
+ # Returns the currently loaded version of Action Cable as a <tt>Gem::Version</tt>.
5
5
  def self.gem_version
6
6
  Gem::Version.new VERSION::STRING
7
7
  end
@@ -9,8 +9,8 @@ module ActionCable
9
9
  module VERSION
10
10
  MAJOR = 7
11
11
  MINOR = 0
12
- TINY = 2
13
- PRE = "3"
12
+ TINY = 4
13
+ PRE = nil
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require "thread"
4
4
 
5
- gem "redis", ">= 3", "< 5"
5
+ gem "redis", ">= 3", "< 6"
6
6
  require "redis"
7
7
 
8
8
  require "active_support/core_ext/hash/except"
@@ -56,7 +56,7 @@ module ActionCable
56
56
  end
57
57
 
58
58
  def redis_connection
59
- self.class.redis_connector.call(@server.config.cable.merge(id: identifier))
59
+ self.class.redis_connector.call(@server.config.cable.symbolize_keys.merge(id: identifier))
60
60
  end
61
61
 
62
62
  class Listener < SubscriberMap
@@ -69,7 +69,7 @@ module ActionCable
69
69
  @subscribe_callbacks = Hash.new { |h, k| h[k] = [] }
70
70
  @subscription_lock = Mutex.new
71
71
 
72
- @raw_client = nil
72
+ @subscribed_client = nil
73
73
 
74
74
  @when_connected = []
75
75
 
@@ -78,13 +78,13 @@ module ActionCable
78
78
 
79
79
  def listen(conn)
80
80
  conn.without_reconnect do
81
- original_client = conn.respond_to?(:_client) ? conn._client : conn.client
81
+ original_client = extract_subscribed_client(conn)
82
82
 
83
83
  conn.subscribe("_action_cable_internal") do |on|
84
84
  on.subscribe do |chan, count|
85
85
  @subscription_lock.synchronize do
86
86
  if count == 1
87
- @raw_client = original_client
87
+ @subscribed_client = original_client
88
88
 
89
89
  until @when_connected.empty?
90
90
  @when_connected.shift.call
@@ -106,7 +106,7 @@ module ActionCable
106
106
  on.unsubscribe do |chan, count|
107
107
  if count == 0
108
108
  @subscription_lock.synchronize do
109
- @raw_client = nil
109
+ @subscribed_client = nil
110
110
  end
111
111
  end
112
112
  end
@@ -119,8 +119,8 @@ module ActionCable
119
119
  return if @thread.nil?
120
120
 
121
121
  when_connected do
122
- send_command("unsubscribe")
123
- @raw_client = nil
122
+ @subscribed_client.unsubscribe
123
+ @subscribed_client = nil
124
124
  end
125
125
  end
126
126
 
@@ -131,13 +131,13 @@ module ActionCable
131
131
  @subscription_lock.synchronize do
132
132
  ensure_listener_running
133
133
  @subscribe_callbacks[channel] << on_success
134
- when_connected { send_command("subscribe", channel) }
134
+ when_connected { @subscribed_client.subscribe(channel) }
135
135
  end
136
136
  end
137
137
 
138
138
  def remove_channel(channel)
139
139
  @subscription_lock.synchronize do
140
- when_connected { send_command("unsubscribe", channel) }
140
+ when_connected { @subscribed_client.unsubscribe(channel) }
141
141
  end
142
142
  end
143
143
 
@@ -156,22 +156,49 @@ module ActionCable
156
156
  end
157
157
 
158
158
  def when_connected(&block)
159
- if @raw_client
159
+ if @subscribed_client
160
160
  block.call
161
161
  else
162
162
  @when_connected << block
163
163
  end
164
164
  end
165
165
 
166
- def send_command(*command)
167
- @raw_client.write(command)
166
+ if ::Redis::VERSION < "5"
167
+ class SubscribedClient
168
+ def initialize(raw_client)
169
+ @raw_client = raw_client
170
+ end
171
+
172
+ def subscribe(*channel)
173
+ send_command("subscribe", *channel)
174
+ end
175
+
176
+ def unsubscribe(*channel)
177
+ send_command("unsubscribe", *channel)
178
+ end
179
+
180
+ private
181
+ def send_command(*command)
182
+ @raw_client.write(command)
168
183
 
169
- very_raw_connection =
170
- @raw_client.connection.instance_variable_defined?(:@connection) &&
171
- @raw_client.connection.instance_variable_get(:@connection)
184
+ very_raw_connection =
185
+ @raw_client.connection.instance_variable_defined?(:@connection) &&
186
+ @raw_client.connection.instance_variable_get(:@connection)
172
187
 
173
- if very_raw_connection && very_raw_connection.respond_to?(:flush)
174
- very_raw_connection.flush
188
+ if very_raw_connection && very_raw_connection.respond_to?(:flush)
189
+ very_raw_connection.flush
190
+ end
191
+ nil
192
+ end
193
+ end
194
+
195
+ def extract_subscribed_client(conn)
196
+ raw_client = conn.respond_to?(:_client) ? conn._client : conn.client
197
+ SubscribedClient.new(raw_client)
198
+ end
199
+ else
200
+ def extract_subscribed_client(conn)
201
+ conn
175
202
  end
176
203
  end
177
204
  end
@@ -7,7 +7,7 @@ module ActionCable
7
7
  # == Test adapter for Action Cable
8
8
  #
9
9
  # The test adapter should be used only in testing. Along with
10
- # <tt>ActionCable::TestHelper</tt> it makes a great tool to test your Rails application.
10
+ # ActionCable::TestHelper it makes a great tool to test your Rails application.
11
11
  #
12
12
  # To use the test adapter set +adapter+ value to +test+ in your +config/cable.yml+ file.
13
13
  #
@@ -3,7 +3,7 @@
3
3
  require_relative "gem_version"
4
4
 
5
5
  module ActionCable
6
- # Returns the version of the currently loaded Action Cable as a <tt>Gem::Version</tt>
6
+ # Returns the currently loaded version of Action Cable as a <tt>Gem::Version</tt>.
7
7
  def self.version
8
8
  gem_version
9
9
  end
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: 7.0.2.3
4
+ version: 7.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pratik Naik
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-03-08 00:00:00.000000000 Z
12
+ date: 2022-09-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -17,28 +17,28 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 7.0.2.3
20
+ version: 7.0.4
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - '='
26
26
  - !ruby/object:Gem::Version
27
- version: 7.0.2.3
27
+ version: 7.0.4
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: actionpack
30
30
  requirement: !ruby/object:Gem::Requirement
31
31
  requirements:
32
32
  - - '='
33
33
  - !ruby/object:Gem::Version
34
- version: 7.0.2.3
34
+ version: 7.0.4
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - '='
40
40
  - !ruby/object:Gem::Version
41
- version: 7.0.2.3
41
+ version: 7.0.4
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: nio4r
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -142,10 +142,10 @@ licenses:
142
142
  - MIT
143
143
  metadata:
144
144
  bug_tracker_uri: https://github.com/rails/rails/issues
145
- changelog_uri: https://github.com/rails/rails/blob/v7.0.2.3/actioncable/CHANGELOG.md
146
- documentation_uri: https://api.rubyonrails.org/v7.0.2.3/
145
+ changelog_uri: https://github.com/rails/rails/blob/v7.0.4/actioncable/CHANGELOG.md
146
+ documentation_uri: https://api.rubyonrails.org/v7.0.4/
147
147
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
148
- source_code_uri: https://github.com/rails/rails/tree/v7.0.2.3/actioncable
148
+ source_code_uri: https://github.com/rails/rails/tree/v7.0.4/actioncable
149
149
  rubygems_mfa_required: 'true'
150
150
  post_install_message:
151
151
  rdoc_options: []
@@ -162,7 +162,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
162
162
  - !ruby/object:Gem::Version
163
163
  version: '0'
164
164
  requirements: []
165
- rubygems_version: 3.1.6
165
+ rubygems_version: 3.3.3
166
166
  signing_key:
167
167
  specification_version: 4
168
168
  summary: WebSocket framework for Rails.