actioncable 7.0.2.3 → 7.0.4

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: 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.