actioncable 6.1.7.9 → 7.2.2.1

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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -160
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +5 -5
  5. data/app/assets/javascripts/action_cable.js +239 -302
  6. data/app/assets/javascripts/actioncable.esm.js +512 -0
  7. data/app/assets/javascripts/actioncable.js +510 -0
  8. data/lib/action_cable/channel/base.rb +114 -90
  9. data/lib/action_cable/channel/broadcasting.rb +25 -16
  10. data/lib/action_cable/channel/callbacks.rb +39 -0
  11. data/lib/action_cable/channel/naming.rb +10 -7
  12. data/lib/action_cable/channel/periodic_timers.rb +7 -7
  13. data/lib/action_cable/channel/streams.rb +81 -68
  14. data/lib/action_cable/channel/test_case.rb +133 -87
  15. data/lib/action_cable/connection/authorization.rb +4 -1
  16. data/lib/action_cable/connection/base.rb +71 -43
  17. data/lib/action_cable/connection/callbacks.rb +57 -0
  18. data/lib/action_cable/connection/client_socket.rb +3 -1
  19. data/lib/action_cable/connection/identification.rb +10 -6
  20. data/lib/action_cable/connection/internal_channel.rb +7 -2
  21. data/lib/action_cable/connection/message_buffer.rb +4 -1
  22. data/lib/action_cable/connection/stream.rb +2 -2
  23. data/lib/action_cable/connection/stream_event_loop.rb +4 -4
  24. data/lib/action_cable/connection/subscriptions.rb +8 -3
  25. data/lib/action_cable/connection/tagged_logger_proxy.rb +14 -9
  26. data/lib/action_cable/connection/test_case.rb +67 -55
  27. data/lib/action_cable/connection/web_socket.rb +11 -7
  28. data/lib/action_cable/deprecator.rb +9 -0
  29. data/lib/action_cable/engine.rb +28 -9
  30. data/lib/action_cable/gem_version.rb +7 -5
  31. data/lib/action_cable/helpers/action_cable_helper.rb +21 -18
  32. data/lib/action_cable/remote_connections.rb +25 -13
  33. data/lib/action_cable/server/base.rb +29 -14
  34. data/lib/action_cable/server/broadcasting.rb +24 -16
  35. data/lib/action_cable/server/configuration.rb +28 -14
  36. data/lib/action_cable/server/connections.rb +13 -5
  37. data/lib/action_cable/server/worker/active_record_connection_management.rb +4 -2
  38. data/lib/action_cable/server/worker.rb +7 -7
  39. data/lib/action_cable/subscription_adapter/async.rb +1 -1
  40. data/lib/action_cable/subscription_adapter/base.rb +2 -0
  41. data/lib/action_cable/subscription_adapter/channel_prefix.rb +2 -0
  42. data/lib/action_cable/subscription_adapter/inline.rb +2 -0
  43. data/lib/action_cable/subscription_adapter/postgresql.rb +6 -5
  44. data/lib/action_cable/subscription_adapter/redis.rb +101 -25
  45. data/lib/action_cable/subscription_adapter/subscriber_map.rb +2 -0
  46. data/lib/action_cable/subscription_adapter/test.rb +7 -6
  47. data/lib/action_cable/test_case.rb +2 -0
  48. data/lib/action_cable/test_helper.rb +89 -59
  49. data/lib/action_cable/version.rb +3 -1
  50. data/lib/action_cable.rb +30 -12
  51. data/lib/rails/generators/channel/USAGE +14 -8
  52. data/lib/rails/generators/channel/channel_generator.rb +95 -20
  53. data/lib/rails/generators/channel/templates/javascript/index.js.tt +1 -5
  54. data/lib/rails/generators/test_unit/channel_generator.rb +2 -0
  55. metadata +29 -15
  56. data/lib/action_cable/channel.rb +0 -17
  57. data/lib/action_cable/connection.rb +0 -22
  58. data/lib/action_cable/server.rb +0 -16
  59. data/lib/action_cable/subscription_adapter.rb +0 -12
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  module ActionCable
4
6
  # Provides helper methods for testing Action Cable broadcasting
5
7
  module TestHelper
@@ -18,105 +20,123 @@ module ActionCable
18
20
  ActionCable.server.instance_variable_set(:@pubsub, @old_pubsub_adapter)
19
21
  end
20
22
 
21
- # Asserts that the number of broadcasted messages to the stream matches the given number.
22
- #
23
- # def test_broadcasts
24
- # assert_broadcasts 'messages', 0
25
- # ActionCable.server.broadcast 'messages', { text: 'hello' }
26
- # assert_broadcasts 'messages', 1
27
- # ActionCable.server.broadcast 'messages', { text: 'world' }
28
- # assert_broadcasts 'messages', 2
29
- # end
30
- #
31
- # If a block is passed, that block should cause the specified number of
32
- # messages to be broadcasted.
23
+ # Asserts that the number of broadcasted messages to the stream matches the
24
+ # given number.
33
25
  #
34
- # def test_broadcasts_again
35
- # assert_broadcasts('messages', 1) do
26
+ # def test_broadcasts
27
+ # assert_broadcasts 'messages', 0
36
28
  # ActionCable.server.broadcast 'messages', { text: 'hello' }
29
+ # assert_broadcasts 'messages', 1
30
+ # ActionCable.server.broadcast 'messages', { text: 'world' }
31
+ # assert_broadcasts 'messages', 2
37
32
  # end
38
33
  #
39
- # assert_broadcasts('messages', 2) do
40
- # ActionCable.server.broadcast 'messages', { text: 'hi' }
41
- # ActionCable.server.broadcast 'messages', { text: 'how are you?' }
34
+ # If a block is passed, that block should cause the specified number of messages
35
+ # to be broadcasted.
36
+ #
37
+ # def test_broadcasts_again
38
+ # assert_broadcasts('messages', 1) do
39
+ # ActionCable.server.broadcast 'messages', { text: 'hello' }
40
+ # end
41
+ #
42
+ # assert_broadcasts('messages', 2) do
43
+ # ActionCable.server.broadcast 'messages', { text: 'hi' }
44
+ # ActionCable.server.broadcast 'messages', { text: 'how are you?' }
45
+ # end
42
46
  # end
43
- # end
44
47
  #
45
48
  def assert_broadcasts(stream, number, &block)
46
49
  if block_given?
47
- original_count = broadcasts_size(stream)
48
- assert_nothing_raised(&block)
49
- new_count = broadcasts_size(stream)
50
- actual_count = new_count - original_count
50
+ new_messages = new_broadcasts_from(broadcasts(stream), stream, "assert_broadcasts", &block)
51
+
52
+ actual_count = new_messages.size
53
+ assert_equal number, actual_count, "#{number} broadcasts to #{stream} expected, but #{actual_count} were sent"
51
54
  else
52
- actual_count = broadcasts_size(stream)
55
+ actual_count = broadcasts(stream).size
56
+ assert_equal number, actual_count, "#{number} broadcasts to #{stream} expected, but #{actual_count} were sent"
53
57
  end
54
-
55
- assert_equal number, actual_count, "#{number} broadcasts to #{stream} expected, but #{actual_count} were sent"
56
58
  end
57
59
 
58
60
  # Asserts that no messages have been sent to the stream.
59
61
  #
60
- # def test_no_broadcasts
61
- # assert_no_broadcasts 'messages'
62
- # ActionCable.server.broadcast 'messages', { text: 'hi' }
63
- # assert_broadcasts 'messages', 1
64
- # end
62
+ # def test_no_broadcasts
63
+ # assert_no_broadcasts 'messages'
64
+ # ActionCable.server.broadcast 'messages', { text: 'hi' }
65
+ # assert_broadcasts 'messages', 1
66
+ # end
65
67
  #
66
68
  # If a block is passed, that block should not cause any message to be sent.
67
69
  #
68
- # def test_broadcasts_again
69
- # assert_no_broadcasts 'messages' do
70
- # # No job messages should be sent from this block
70
+ # def test_broadcasts_again
71
+ # assert_no_broadcasts 'messages' do
72
+ # # No job messages should be sent from this block
73
+ # end
71
74
  # end
72
- # end
73
75
  #
74
76
  # Note: This assertion is simply a shortcut for:
75
77
  #
76
- # assert_broadcasts 'messages', 0, &block
78
+ # assert_broadcasts 'messages', 0, &block
77
79
  #
78
80
  def assert_no_broadcasts(stream, &block)
79
81
  assert_broadcasts stream, 0, &block
80
82
  end
81
83
 
82
- # Asserts that the specified message has been sent to the stream.
84
+ # Returns the messages that are broadcasted in the block.
83
85
  #
84
- # def test_assert_transmitted_message
85
- # ActionCable.server.broadcast 'messages', text: 'hello'
86
- # assert_broadcast_on('messages', text: 'hello')
87
- # end
86
+ # def test_broadcasts
87
+ # messages = capture_broadcasts('messages') do
88
+ # ActionCable.server.broadcast 'messages', { text: 'hi' }
89
+ # ActionCable.server.broadcast 'messages', { text: 'how are you?' }
90
+ # end
91
+ # assert_equal 2, messages.length
92
+ # assert_equal({ text: 'hi' }, messages.first)
93
+ # assert_equal({ text: 'how are you?' }, messages.last)
94
+ # end
88
95
  #
89
- # If a block is passed, that block should cause a message with the specified data to be sent.
96
+ def capture_broadcasts(stream, &block)
97
+ new_broadcasts_from(broadcasts(stream), stream, "capture_broadcasts", &block).map { |m| ActiveSupport::JSON.decode(m) }
98
+ end
99
+
100
+ # Asserts that the specified message has been sent to the stream.
90
101
  #
91
- # def test_assert_broadcast_on_again
92
- # assert_broadcast_on('messages', text: 'hello') do
102
+ # def test_assert_transmitted_message
93
103
  # ActionCable.server.broadcast 'messages', text: 'hello'
104
+ # assert_broadcast_on('messages', text: 'hello')
105
+ # end
106
+ #
107
+ # If a block is passed, that block should cause a message with the specified
108
+ # data to be sent.
109
+ #
110
+ # def test_assert_broadcast_on_again
111
+ # assert_broadcast_on('messages', text: 'hello') do
112
+ # ActionCable.server.broadcast 'messages', text: 'hello'
113
+ # end
94
114
  # end
95
- # end
96
115
  #
97
116
  def assert_broadcast_on(stream, data, &block)
98
- # Encode to JSON and back–we want to use this value to compare
99
- # with decoded JSON.
100
- # Comparing JSON strings doesn't work due to the order if the keys.
117
+ # Encode to JSON and back–we want to use this value to compare with decoded
118
+ # JSON. Comparing JSON strings doesn't work due to the order if the keys.
101
119
  serialized_msg =
102
120
  ActiveSupport::JSON.decode(ActiveSupport::JSON.encode(data))
103
121
 
104
122
  new_messages = broadcasts(stream)
105
123
  if block_given?
106
- old_messages = new_messages
107
- clear_messages(stream)
108
-
109
- assert_nothing_raised(&block)
110
- new_messages = broadcasts(stream)
111
- clear_messages(stream)
112
-
113
- # Restore all sent messages
114
- (old_messages + new_messages).each { |m| pubsub_adapter.broadcast(stream, m) }
124
+ new_messages = new_broadcasts_from(new_messages, stream, "assert_broadcast_on", &block)
115
125
  end
116
126
 
117
127
  message = new_messages.find { |msg| ActiveSupport::JSON.decode(msg) == serialized_msg }
118
128
 
119
- assert message, "No messages sent with #{data} to #{stream}"
129
+ error_message = "No messages sent with #{data} to #{stream}"
130
+
131
+ if new_messages.any?
132
+ error_message = new_messages.inject("#{error_message}\nMessage(s) found:\n") do |error_message, new_message|
133
+ error_message + "#{ActiveSupport::JSON.decode(new_message)}\n"
134
+ end
135
+ else
136
+ error_message = "#{error_message}\nNo message found for #{stream}"
137
+ end
138
+
139
+ assert message, error_message
120
140
  end
121
141
 
122
142
  def pubsub_adapter # :nodoc:
@@ -126,8 +146,18 @@ module ActionCable
126
146
  delegate :broadcasts, :clear_messages, to: :pubsub_adapter
127
147
 
128
148
  private
129
- def broadcasts_size(channel)
130
- broadcasts(channel).size
149
+ def new_broadcasts_from(current_messages, stream, assertion, &block)
150
+ old_messages = current_messages
151
+ clear_messages(stream)
152
+
153
+ _assert_nothing_raised_or_warn(assertion, &block)
154
+ new_messages = broadcasts(stream)
155
+ clear_messages(stream)
156
+
157
+ # Restore all sent messages
158
+ (old_messages + new_messages).each { |m| pubsub_adapter.broadcast(stream, m) }
159
+
160
+ new_messages
131
161
  end
132
162
  end
133
163
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  require_relative "gem_version"
4
6
 
5
7
  module ActionCable
6
- # Returns the version of the currently loaded Action Cable as a <tt>Gem::Version</tt>
8
+ # Returns the currently loaded version of Action Cable as a `Gem::Version`.
7
9
  def self.version
8
10
  gem_version
9
11
  end
data/lib/action_cable.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  #--
4
- # Copyright (c) 2015-2022 Basecamp, LLC
4
+ # Copyright (c) 37signals 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
@@ -25,10 +25,35 @@
25
25
 
26
26
  require "active_support"
27
27
  require "active_support/rails"
28
- require "action_cable/version"
28
+ require "zeitwerk"
29
29
 
30
+ # We compute lib this way instead of using __dir__ because __dir__ gives a real
31
+ # path, while __FILE__ honors symlinks. If the gem is stored under a symlinked
32
+ # directory, this matters.
33
+ lib = File.dirname(__FILE__)
34
+
35
+ Zeitwerk::Loader.for_gem.tap do |loader|
36
+ loader.ignore(
37
+ "#{lib}/rails", # Contains generators, templates, docs, etc.
38
+ "#{lib}/action_cable/gem_version.rb",
39
+ "#{lib}/action_cable/version.rb",
40
+ "#{lib}/action_cable/deprecator.rb",
41
+ )
42
+
43
+ loader.do_not_eager_load(
44
+ "#{lib}/action_cable/subscription_adapter", # Adapters are required and loaded on demand.
45
+ "#{lib}/action_cable/test_helper.rb",
46
+ Dir["#{lib}/action_cable/**/test_case.rb"]
47
+ )
48
+
49
+ loader.inflector.inflect("postgresql" => "PostgreSQL")
50
+ end.setup
51
+
52
+ # :markup: markdown
53
+ # :include: ../README.md
30
54
  module ActionCable
31
- extend ActiveSupport::Autoload
55
+ require_relative "action_cable/version"
56
+ require_relative "action_cable/deprecator"
32
57
 
33
58
  INTERNAL = {
34
59
  message_types: {
@@ -41,7 +66,8 @@ module ActionCable
41
66
  disconnect_reasons: {
42
67
  unauthorized: "unauthorized",
43
68
  invalid_request: "invalid_request",
44
- server_restart: "server_restart"
69
+ server_restart: "server_restart",
70
+ remote: "remote"
45
71
  },
46
72
  default_mount_path: "/cable",
47
73
  protocols: ["actioncable-v1-json", "actioncable-unsupported"].freeze
@@ -51,12 +77,4 @@ module ActionCable
51
77
  module_function def server
52
78
  @server ||= ActionCable::Server::Base.new
53
79
  end
54
-
55
- autoload :Server
56
- autoload :Connection
57
- autoload :Channel
58
- autoload :RemoteConnections
59
- autoload :SubscriptionAdapter
60
- autoload :TestHelper
61
- autoload :TestCase
62
80
  end
@@ -1,13 +1,19 @@
1
1
  Description:
2
- ============
3
2
  Generates a new cable channel for the server (in Ruby) and client (in JavaScript).
4
3
  Pass the channel name, either CamelCased or under_scored, and an optional list of channel actions as arguments.
5
4
 
6
- Example:
7
- ========
8
- bin/rails generate channel Chat speak
5
+ Examples:
6
+ `bin/rails generate channel notification`
9
7
 
10
- creates a Chat channel class, test and JavaScript asset:
11
- Channel: app/channels/chat_channel.rb
12
- Test: test/channels/chat_channel_test.rb
13
- Assets: app/javascript/channels/chat_channel.js
8
+ creates a notification channel class, test and JavaScript asset:
9
+ Channel: app/channels/notification_channel.rb
10
+ Test: test/channels/notification_channel_test.rb
11
+ Assets: $JAVASCRIPT_PATH/channels/notification_channel.js
12
+
13
+ `bin/rails generate channel chat speak`
14
+
15
+ creates a chat channel with a speak action.
16
+
17
+ `bin/rails generate channel comments --no-assets`
18
+
19
+ creates a comments channel without JavaScript assets.
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  module Rails
4
6
  module Generators
5
7
  class ChannelGenerator < NamedBase
@@ -13,39 +15,112 @@ module Rails
13
15
 
14
16
  hook_for :test_framework
15
17
 
16
- def create_channel_file
17
- template "channel.rb", File.join("app/channels", class_path, "#{file_name}_channel.rb")
18
+ def create_channel_files
19
+ create_shared_channel_files
20
+ create_channel_file
21
+
22
+ if using_javascript?
23
+ if first_setup_required?
24
+ create_shared_channel_javascript_files
25
+ import_channels_in_javascript_entrypoint
18
26
 
19
- if options[:assets]
20
- if behavior == :invoke
21
- template "javascript/index.js", "app/javascript/channels/index.js"
22
- template "javascript/consumer.js", "app/javascript/channels/consumer.js"
27
+ if using_importmap?
28
+ pin_javascript_dependencies
29
+ elsif using_js_runtime?
30
+ install_javascript_dependencies
31
+ end
23
32
  end
24
33
 
25
- js_template "javascript/channel", File.join("app/javascript/channels", class_path, "#{file_name}_channel")
34
+ create_channel_javascript_file
35
+ import_channel_in_javascript_entrypoint
26
36
  end
27
-
28
- generate_application_cable_files
29
37
  end
30
38
 
31
39
  private
40
+ def create_shared_channel_files
41
+ return if behavior != :invoke
42
+
43
+ copy_file "#{__dir__}/templates/application_cable/channel.rb",
44
+ "app/channels/application_cable/channel.rb"
45
+ copy_file "#{__dir__}/templates/application_cable/connection.rb",
46
+ "app/channels/application_cable/connection.rb"
47
+ end
48
+
49
+ def create_channel_file
50
+ template "channel.rb",
51
+ File.join("app/channels", class_path, "#{file_name}_channel.rb")
52
+ end
53
+
54
+ def create_shared_channel_javascript_files
55
+ template "javascript/index.js", "app/javascript/channels/index.js"
56
+ template "javascript/consumer.js", "app/javascript/channels/consumer.js"
57
+ end
58
+
59
+ def create_channel_javascript_file
60
+ channel_js_path = File.join("app/javascript/channels", class_path, "#{file_name}_channel")
61
+ js_template "javascript/channel", channel_js_path
62
+ gsub_file "#{channel_js_path}.js", /\.\/consumer/, "channels/consumer" unless using_js_runtime?
63
+ end
64
+
65
+ def import_channels_in_javascript_entrypoint
66
+ append_to_file "app/javascript/application.js",
67
+ using_js_runtime? ? %(import "./channels"\n) : %(import "channels"\n)
68
+ end
69
+
70
+ def import_channel_in_javascript_entrypoint
71
+ append_to_file "app/javascript/channels/index.js",
72
+ using_js_runtime? ? %(import "./#{file_name}_channel"\n) : %(import "channels/#{file_name}_channel"\n)
73
+ end
74
+
75
+ def install_javascript_dependencies
76
+ say "Installing JavaScript dependencies", :green
77
+ if using_bun?
78
+ run "bun add @rails/actioncable"
79
+ elsif using_node?
80
+ run "yarn add @rails/actioncable"
81
+ end
82
+ end
83
+
84
+ def pin_javascript_dependencies
85
+ append_to_file "config/importmap.rb", <<-RUBY
86
+ pin "@rails/actioncable", to: "actioncable.esm.js"
87
+ pin_all_from "app/javascript/channels", under: "channels"
88
+ RUBY
89
+ end
90
+
32
91
  def file_name
33
92
  @_file_name ||= super.sub(/_channel\z/i, "")
34
93
  end
35
94
 
36
- # FIXME: Change these files to symlinks once RubyGems 2.5.0 is required.
37
- def generate_application_cable_files
38
- return if behavior != :invoke
95
+ def first_setup_required?
96
+ !root.join("app/javascript/channels/index.js").exist?
97
+ end
39
98
 
40
- files = [
41
- "application_cable/channel.rb",
42
- "application_cable/connection.rb"
43
- ]
99
+ def using_javascript?
100
+ @using_javascript ||= options[:assets] && root.join("app/javascript").exist?
101
+ end
44
102
 
45
- files.each do |name|
46
- path = File.join("app/channels/", name)
47
- template(name, path) if !File.exist?(path)
48
- end
103
+ def using_js_runtime?
104
+ @using_js_runtime ||= root.join("package.json").exist?
105
+ end
106
+
107
+ def using_bun?
108
+ # Cannot assume bun.lockb has been generated yet so we look for a file known to
109
+ # be generated by the jsbundling-rails gem
110
+ @using_bun ||= using_js_runtime? && root.join("bun.config.js").exist?
111
+ end
112
+
113
+ def using_node?
114
+ # Bun is the only runtime that _isn't_ node.
115
+ @using_node ||= using_js_runtime? && !root.join("bun.config.js").exist?
116
+ end
117
+
118
+ def using_importmap?
119
+ @using_importmap ||= root.join("config/importmap.rb").exist?
120
+ end
121
+
122
+ def root
123
+ @root ||= Pathname(destination_root)
49
124
  end
50
125
  end
51
126
  end
@@ -1,5 +1 @@
1
- // Load all the channels within this directory and all subdirectories.
2
- // Channel files must be named *_channel.js.
3
-
4
- const channels = require.context('.', true, /_channel\.js$/)
5
- channels.keys().forEach(channels)
1
+ // Import all the channels to be used by Action Cable
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ # :markup: markdown
4
+
3
5
  module TestUnit
4
6
  module Generators
5
7
  class ChannelGenerator < ::Rails::Generators::NamedBase
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: 6.1.7.9
4
+ version: 7.2.2.1
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: 2024-10-15 00:00:00.000000000 Z
12
+ date: 2024-12-10 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: 6.1.7.9
20
+ version: 7.2.2.1
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: 6.1.7.9
27
+ version: 7.2.2.1
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: 6.1.7.9
34
+ version: 7.2.2.1
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: 6.1.7.9
41
+ version: 7.2.2.1
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: nio4r
44
44
  requirement: !ruby/object:Gem::Requirement
@@ -67,6 +67,20 @@ dependencies:
67
67
  - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 0.6.1
70
+ - !ruby/object:Gem::Dependency
71
+ name: zeitwerk
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - "~>"
75
+ - !ruby/object:Gem::Version
76
+ version: '2.6'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - "~>"
82
+ - !ruby/object:Gem::Version
83
+ version: '2.6'
70
84
  description: Structure many real-time application concerns into channels over a single
71
85
  WebSocket connection.
72
86
  email:
@@ -80,8 +94,9 @@ files:
80
94
  - MIT-LICENSE
81
95
  - README.md
82
96
  - app/assets/javascripts/action_cable.js
97
+ - app/assets/javascripts/actioncable.esm.js
98
+ - app/assets/javascripts/actioncable.js
83
99
  - lib/action_cable.rb
84
- - lib/action_cable/channel.rb
85
100
  - lib/action_cable/channel/base.rb
86
101
  - lib/action_cable/channel/broadcasting.rb
87
102
  - lib/action_cable/channel/callbacks.rb
@@ -89,9 +104,9 @@ files:
89
104
  - lib/action_cable/channel/periodic_timers.rb
90
105
  - lib/action_cable/channel/streams.rb
91
106
  - lib/action_cable/channel/test_case.rb
92
- - lib/action_cable/connection.rb
93
107
  - lib/action_cable/connection/authorization.rb
94
108
  - lib/action_cable/connection/base.rb
109
+ - lib/action_cable/connection/callbacks.rb
95
110
  - lib/action_cable/connection/client_socket.rb
96
111
  - lib/action_cable/connection/identification.rb
97
112
  - lib/action_cable/connection/internal_channel.rb
@@ -102,18 +117,17 @@ files:
102
117
  - lib/action_cable/connection/tagged_logger_proxy.rb
103
118
  - lib/action_cable/connection/test_case.rb
104
119
  - lib/action_cable/connection/web_socket.rb
120
+ - lib/action_cable/deprecator.rb
105
121
  - lib/action_cable/engine.rb
106
122
  - lib/action_cable/gem_version.rb
107
123
  - lib/action_cable/helpers/action_cable_helper.rb
108
124
  - lib/action_cable/remote_connections.rb
109
- - lib/action_cable/server.rb
110
125
  - lib/action_cable/server/base.rb
111
126
  - lib/action_cable/server/broadcasting.rb
112
127
  - lib/action_cable/server/configuration.rb
113
128
  - lib/action_cable/server/connections.rb
114
129
  - lib/action_cable/server/worker.rb
115
130
  - lib/action_cable/server/worker/active_record_connection_management.rb
116
- - lib/action_cable/subscription_adapter.rb
117
131
  - lib/action_cable/subscription_adapter/async.rb
118
132
  - lib/action_cable/subscription_adapter/base.rb
119
133
  - lib/action_cable/subscription_adapter/channel_prefix.rb
@@ -140,10 +154,10 @@ licenses:
140
154
  - MIT
141
155
  metadata:
142
156
  bug_tracker_uri: https://github.com/rails/rails/issues
143
- changelog_uri: https://github.com/rails/rails/blob/v6.1.7.9/actioncable/CHANGELOG.md
144
- documentation_uri: https://api.rubyonrails.org/v6.1.7.9/
157
+ changelog_uri: https://github.com/rails/rails/blob/v7.2.2.1/actioncable/CHANGELOG.md
158
+ documentation_uri: https://api.rubyonrails.org/v7.2.2.1/
145
159
  mailing_list_uri: https://discuss.rubyonrails.org/c/rubyonrails-talk
146
- source_code_uri: https://github.com/rails/rails/tree/v6.1.7.9/actioncable
160
+ source_code_uri: https://github.com/rails/rails/tree/v7.2.2.1/actioncable
147
161
  rubygems_mfa_required: 'true'
148
162
  post_install_message:
149
163
  rdoc_options: []
@@ -153,14 +167,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
153
167
  requirements:
154
168
  - - ">="
155
169
  - !ruby/object:Gem::Version
156
- version: 2.5.0
170
+ version: 3.1.0
157
171
  required_rubygems_version: !ruby/object:Gem::Requirement
158
172
  requirements:
159
173
  - - ">="
160
174
  - !ruby/object:Gem::Version
161
175
  version: '0'
162
176
  requirements: []
163
- rubygems_version: 3.5.16
177
+ rubygems_version: 3.5.22
164
178
  signing_key:
165
179
  specification_version: 4
166
180
  summary: WebSocket framework for Rails.
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionCable
4
- module Channel
5
- extend ActiveSupport::Autoload
6
-
7
- eager_autoload do
8
- autoload :Base
9
- autoload :Broadcasting
10
- autoload :Callbacks
11
- autoload :Naming
12
- autoload :PeriodicTimers
13
- autoload :Streams
14
- autoload :TestCase
15
- end
16
- end
17
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module ActionCable
4
- module Connection
5
- extend ActiveSupport::Autoload
6
-
7
- eager_autoload do
8
- autoload :Authorization
9
- autoload :Base
10
- autoload :ClientSocket
11
- autoload :Identification
12
- autoload :InternalChannel
13
- autoload :MessageBuffer
14
- autoload :Stream
15
- autoload :StreamEventLoop
16
- autoload :Subscriptions
17
- autoload :TaggedLoggerProxy
18
- autoload :TestCase
19
- autoload :WebSocket
20
- end
21
- end
22
- end