actioncable 6.0.0.beta1 → 6.0.1.rc1

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: 20a6bcfcf415a9ea43c5d5c373f866bbef09a40408f9295e0977def92827b56f
4
- data.tar.gz: ab61cfc6789eeba117d09b5472adb861d8afaade19486e6bd4b2f34917d13596
3
+ metadata.gz: 86d46b846c3fb07e49e3a307349c964e9b11d4c7b06f22a126bbeaa01b158e43
4
+ data.tar.gz: 39167fb170b2d5ea8106427bb3b44cc87079c843e89a96e2bfe6bae489b2370a
5
5
  SHA512:
6
- metadata.gz: 0fc74fe87659a01fbbb841a36de8bd2027d2c3ec73ea92f23706ae07bc8648e5c92cb1bd08bb4f6e00cbbab2c201db183badb1cecae8d7b4839232116fc43e24
7
- data.tar.gz: b09eb6b5430aa9fe60eb41aa8a9e21ad59a49bf281f14cbcf562200ae09e9d2950cc0eb3ebc2d6019f506325cab1c7ff58ea735d4672643ca2de76fd99b86524
6
+ metadata.gz: e3cf41533f7f14bc919495b240de8f3c6b520f7c4a2dc88ca6190ea7eef7e1ffb578aae6f4089676c3066241b5b0215037a3a89da0c507aa7759018aef002163
7
+ data.tar.gz: 0b674b1b260ba11b94d8a2e5b290659edd3aeff68939b65327f5d494529a5320144ed957428a14f210f10c29bcc263bc475e1595ce2b355b3bd0c29fa67a783f
@@ -1,5 +1,99 @@
1
+ ## Rails 6.0.1.rc1 (October 31, 2019) ##
2
+
3
+ * No changes.
4
+
5
+
6
+ ## Rails 6.0.0 (August 16, 2019) ##
7
+
8
+ * No changes.
9
+
10
+
11
+ ## Rails 6.0.0.rc2 (July 22, 2019) ##
12
+
13
+ * No changes.
14
+
15
+
16
+ ## Rails 6.0.0.rc1 (April 24, 2019) ##
17
+
18
+ * No changes.
19
+
20
+
21
+ ## Rails 6.0.0.beta3 (March 11, 2019) ##
22
+
23
+ * No changes.
24
+
25
+
26
+ ## Rails 6.0.0.beta2 (February 25, 2019) ##
27
+
28
+ * PostgreSQL subscription adapters now support `channel_prefix` option in cable.yml
29
+
30
+ Avoids channel name collisions when multiple apps use the same database for Action Cable.
31
+
32
+ *Vladimir Dementyev*
33
+
34
+ * Allow passing custom configuration to `ActionCable::Server::Base`.
35
+
36
+ You can now create a standalone Action Cable server with a custom configuration
37
+ (e.g. to run it in isolation from the default one):
38
+
39
+ ```ruby
40
+ config = ActionCable::Server::Configuration.new
41
+ config.cable = { adapter: "redis", channel_prefix: "custom_" }
42
+
43
+ CUSTOM_CABLE = ActionCable::Server::Base.new(config: config)
44
+ ```
45
+
46
+ Then you can mount it in the `routes.rb` file:
47
+
48
+ ```ruby
49
+ Rails.application.routes.draw do
50
+ mount CUSTOM_CABLE => "/custom_cable"
51
+ # ...
52
+ end
53
+ ```
54
+
55
+ *Vladimir Dementyev*
56
+
57
+ * Add `:action_cable_connection` and `:action_cable_channel` load hooks.
58
+
59
+ You can use them to extend `ActionCable::Connection::Base` and `ActionCable::Channel::Base`
60
+ functionality:
61
+
62
+ ```ruby
63
+ ActiveSupport.on_load(:action_cable_channel) do
64
+ # do something in the context of ActionCable::Channel::Base
65
+ end
66
+ ```
67
+
68
+ *Vladimir Dementyev*
69
+
70
+ * Add `Channel::Base#broadcast_to`.
71
+
72
+ You can now call `broadcast_to` within a channel action, which equals to
73
+ the `self.class.broadcast_to`.
74
+
75
+ *Vladimir Dementyev*
76
+
77
+ * Make `Channel::Base.broadcasting_for` a public API.
78
+
79
+ You can use `.broadcasting_for` to generate a unique stream identifier within
80
+ a channel for the specified target (e.g. Active Record model):
81
+
82
+ ```ruby
83
+ ChatChannel.broadcasting_for(model) # => "chat:<model.to_gid_param>"
84
+ ```
85
+
86
+ *Vladimir Dementyev*
87
+
88
+
1
89
  ## Rails 6.0.0.beta1 (January 18, 2019) ##
2
90
 
91
+ * [Rename npm package](https://github.com/rails/rails/pull/34905) from
92
+ [`actioncable`](https://www.npmjs.com/package/actioncable) to
93
+ [`@rails/actioncable`](https://www.npmjs.com/package/@rails/actioncable).
94
+
95
+ *Javan Makhmali*
96
+
3
97
  * Merge [`action-cable-testing`](https://github.com/palkan/action-cable-testing) to Rails.
4
98
 
5
99
  *Vladimir Dementyev*
data/README.md CHANGED
@@ -13,7 +13,7 @@ You can read more about Action Cable in the [Action Cable Overview](https://edge
13
13
 
14
14
  API documentation is at:
15
15
 
16
- * http://api.rubyonrails.org
16
+ * https://api.rubyonrails.org
17
17
 
18
18
  Bug reports for the Ruby on Rails project can be filed here:
19
19
 
@@ -28,6 +28,22 @@
28
28
  throw new TypeError("Cannot call a class as a function");
29
29
  }
30
30
  };
31
+ var createClass = function() {
32
+ function defineProperties(target, props) {
33
+ for (var i = 0; i < props.length; i++) {
34
+ var descriptor = props[i];
35
+ descriptor.enumerable = descriptor.enumerable || false;
36
+ descriptor.configurable = true;
37
+ if ("value" in descriptor) descriptor.writable = true;
38
+ Object.defineProperty(target, descriptor.key, descriptor);
39
+ }
40
+ }
41
+ return function(Constructor, protoProps, staticProps) {
42
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
43
+ if (staticProps) defineProperties(Constructor, staticProps);
44
+ return Constructor;
45
+ };
46
+ }();
31
47
  var now = function now() {
32
48
  return new Date().getTime();
33
49
  };
@@ -432,7 +448,7 @@
432
448
  var Consumer = function() {
433
449
  function Consumer(url) {
434
450
  classCallCheck(this, Consumer);
435
- this.url = url;
451
+ this._url = url;
436
452
  this.subscriptions = new Subscriptions(this);
437
453
  this.connection = new Connection(this);
438
454
  }
@@ -452,19 +468,18 @@
452
468
  return this.connection.open();
453
469
  }
454
470
  };
471
+ createClass(Consumer, [ {
472
+ key: "url",
473
+ get: function get$$1() {
474
+ return createWebSocketURL(this._url);
475
+ }
476
+ } ]);
455
477
  return Consumer;
456
478
  }();
457
- function createConsumer() {
458
- var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig("url") || INTERNAL.default_mount_path;
459
- return new Consumer(createWebSocketURL(url));
460
- }
461
- function getConfig(name) {
462
- var element = document.head.querySelector("meta[name='action-cable-" + name + "']");
463
- if (element) {
464
- return element.getAttribute("content");
465
- }
466
- }
467
479
  function createWebSocketURL(url) {
480
+ if (typeof url === "function") {
481
+ url = url();
482
+ }
468
483
  if (url && !/^wss?:/i.test(url)) {
469
484
  var a = document.createElement("a");
470
485
  a.href = url;
@@ -475,6 +490,16 @@
475
490
  return url;
476
491
  }
477
492
  }
493
+ function createConsumer() {
494
+ var url = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getConfig("url") || INTERNAL.default_mount_path;
495
+ return new Consumer(url);
496
+ }
497
+ function getConfig(name) {
498
+ var element = document.head.querySelector("meta[name='action-cable-" + name + "']");
499
+ if (element) {
500
+ return element.getAttribute("content");
501
+ }
502
+ }
478
503
  exports.Connection = Connection;
479
504
  exports.ConnectionMonitor = ConnectionMonitor;
480
505
  exports.Consumer = Consumer;
@@ -482,10 +507,10 @@
482
507
  exports.Subscription = Subscription;
483
508
  exports.Subscriptions = Subscriptions;
484
509
  exports.adapters = adapters;
510
+ exports.createWebSocketURL = createWebSocketURL;
485
511
  exports.logger = logger;
486
512
  exports.createConsumer = createConsumer;
487
513
  exports.getConfig = getConfig;
488
- exports.createWebSocketURL = createWebSocketURL;
489
514
  Object.defineProperty(exports, "__esModule", {
490
515
  value: true
491
516
  });
@@ -307,3 +307,5 @@ module ActionCable
307
307
  end
308
308
  end
309
309
  end
310
+
311
+ ActiveSupport.run_load_hooks(:action_cable_channel, ActionCable::Channel::Base)
@@ -7,22 +7,32 @@ module ActionCable
7
7
  module Broadcasting
8
8
  extend ActiveSupport::Concern
9
9
 
10
- delegate :broadcasting_for, to: :class
10
+ delegate :broadcasting_for, :broadcast_to, to: :class
11
11
 
12
12
  module ClassMethods
13
13
  # Broadcast a hash to a unique broadcasting for this <tt>model</tt> in this channel.
14
14
  def broadcast_to(model, message)
15
- ActionCable.server.broadcast(broadcasting_for([ channel_name, model ]), message)
15
+ ActionCable.server.broadcast(broadcasting_for(model), message)
16
16
  end
17
17
 
18
- def broadcasting_for(model) #:nodoc:
18
+ # Returns a unique broadcasting identifier for this <tt>model</tt> in this channel:
19
+ #
20
+ # CommentsChannel.broadcasting_for("all") # => "comments:all"
21
+ #
22
+ # You can pass any object as a target (e.g. Active Record model), and it
23
+ # would be serialized into a string under the hood.
24
+ def broadcasting_for(model)
25
+ serialize_broadcasting([ channel_name, model ])
26
+ end
27
+
28
+ def serialize_broadcasting(object) #:nodoc:
19
29
  case
20
- when model.is_a?(Array)
21
- model.map { |m| broadcasting_for(m) }.join(":")
22
- when model.respond_to?(:to_gid_param)
23
- model.to_gid_param
30
+ when object.is_a?(Array)
31
+ object.map { |m| serialize_broadcasting(m) }.join(":")
32
+ when object.respond_to?(:to_gid_param)
33
+ object.to_gid_param
24
34
  else
25
- model.to_param
35
+ object.to_param
26
36
  end
27
37
  end
28
38
  end
@@ -99,7 +99,7 @@ module ActionCable
99
99
  # Pass <tt>coder: ActiveSupport::JSON</tt> to decode messages as JSON before passing to the callback.
100
100
  # Defaults to <tt>coder: nil</tt> which does no decoding, passes raw messages.
101
101
  def stream_for(model, callback = nil, coder: nil, &block)
102
- stream_from(broadcasting_for([ channel_name, model ]), callback || block, coder: coder)
102
+ stream_from(broadcasting_for(model), callback || block, coder: coder)
103
103
  end
104
104
 
105
105
  # Unsubscribes all streams associated with this channel from the pubsub queue.
@@ -143,7 +143,7 @@ module ActionCable
143
143
  # You need to set up your connection manually to provide values for the identifiers.
144
144
  # To do this just use:
145
145
  #
146
- # stub_connection(user: users[:john])
146
+ # stub_connection(user: users(:john))
147
147
  #
148
148
  # == Testing broadcasting
149
149
  #
@@ -157,9 +157,9 @@ module ActionCable
157
157
  # end
158
158
  #
159
159
  # def test_speak
160
- # subscribe room_id: rooms[:chat].id
160
+ # subscribe room_id: rooms(:chat).id
161
161
  #
162
- # assert_broadcasts_on(rooms[:chat], text: "Hello, Rails!") do
162
+ # assert_broadcasts_on(rooms(:chat), text: "Hello, Rails!") do
163
163
  # perform :speak, message: "Hello, Rails!"
164
164
  # end
165
165
  # end
@@ -300,9 +300,7 @@ module ActionCable
300
300
  def broadcasting_for(stream_or_object)
301
301
  return stream_or_object if stream_or_object.is_a?(String)
302
302
 
303
- self.class.channel_class.broadcasting_for(
304
- [self.class.channel_class.channel_name, stream_or_object]
305
- )
303
+ self.class.channel_class.broadcasting_for(stream_or_object)
306
304
  end
307
305
  end
308
306
 
@@ -260,3 +260,5 @@ module ActionCable
260
260
  end
261
261
  end
262
262
  end
263
+
264
+ ActiveSupport.run_load_hooks(:action_cable_connection, ActionCable::Connection::Base)
@@ -42,8 +42,6 @@ module ActionCable
42
42
 
43
43
  class TestRequest < ActionDispatch::TestRequest
44
44
  attr_accessor :session, :cookie_jar
45
-
46
- attr_writer :cookie_jar
47
45
  end
48
46
 
49
47
  module TestConnection
@@ -178,7 +176,7 @@ module ActionCable
178
176
  #
179
177
  # Accepts request path as the first argument and the following request options:
180
178
  #
181
- # - params – url parameters (Hash)
179
+ # - params – URL parameters (Hash)
182
180
  # - headers – request headers (Hash)
183
181
  # - session – session data (Hash)
184
182
  # - env – additional Rack env configuration (Hash)
@@ -9,8 +9,8 @@ module ActionCable
9
9
  module VERSION
10
10
  MAJOR = 6
11
11
  MINOR = 0
12
- TINY = 0
13
- PRE = "beta1"
12
+ TINY = 1
13
+ PRE = "rc1"
14
14
 
15
15
  STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
16
16
  end
@@ -12,14 +12,17 @@ module ActionCable
12
12
  include ActionCable::Server::Broadcasting
13
13
  include ActionCable::Server::Connections
14
14
 
15
- cattr_accessor :config, instance_accessor: true, default: ActionCable::Server::Configuration.new
15
+ cattr_accessor :config, instance_accessor: false, default: ActionCable::Server::Configuration.new
16
+
17
+ attr_reader :config
16
18
 
17
19
  def self.logger; config.logger; end
18
20
  delegate :logger, to: :config
19
21
 
20
22
  attr_reader :mutex
21
23
 
22
- def initialize
24
+ def initialize(config: self.class.config)
25
+ @config = config
23
26
  @mutex = Monitor.new
24
27
  @remote_connections = @event_loop = @worker_pool = @pubsub = nil
25
28
  end
@@ -8,6 +8,8 @@ require "digest/sha1"
8
8
  module ActionCable
9
9
  module SubscriptionAdapter
10
10
  class PostgreSQL < Base # :nodoc:
11
+ prepend ChannelPrefix
12
+
11
13
  def initialize(*)
12
14
  super
13
15
  @listener = nil
@@ -5,6 +5,8 @@ require "thread"
5
5
  gem "redis", ">= 3", "< 5"
6
6
  require "redis"
7
7
 
8
+ require "active_support/core_ext/hash/except"
9
+
8
10
  module ActionCable
9
11
  module SubscriptionAdapter
10
12
  class Redis < Base # :nodoc:
@@ -14,7 +16,7 @@ module ActionCable
14
16
  # This is needed, for example, when using Makara proxies for distributed Redis.
15
17
  cattr_accessor :redis_connector, default: ->(config) do
16
18
  config[:id] ||= "ActionCable-PID-#{$$}"
17
- ::Redis.new(config.slice(:url, :host, :port, :db, :password, :id))
19
+ ::Redis.new(config.except(:adapter, :channel_prefix))
18
20
  end
19
21
 
20
22
  def initialize(*)
@@ -1,15 +1,15 @@
1
1
  import consumer from "./consumer"
2
2
 
3
3
  consumer.subscriptions.create("<%= class_name %>Channel", {
4
- connected: function() {
4
+ connected() {
5
5
  // Called when the subscription is ready for use on the server
6
6
  },
7
7
 
8
- disconnected: function() {
8
+ disconnected() {
9
9
  // Called when the subscription has been terminated by the server
10
10
  },
11
11
 
12
- received: function(data) {
12
+ received(data) {
13
13
  // Called when there's incoming data on the websocket for this channel
14
14
  }<%= actions.any? ? ",\n" : '' %>
15
15
  <% actions.each do |action| -%>
@@ -1,6 +1,6 @@
1
1
  // Action Cable provides the framework to deal with WebSockets in Rails.
2
2
  // You can generate new channels where WebSocket features live using the `rails generate channel` command.
3
3
 
4
- import ActionCable from "@rails/actioncable"
4
+ import { createConsumer } from "@rails/actioncable"
5
5
 
6
- export default ActionCable.createConsumer()
6
+ export default createConsumer()
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.0.0.beta1
4
+ version: 6.0.1.rc1
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: 2019-01-18 00:00:00.000000000 Z
12
+ date: 2019-10-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionpack
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - '='
19
19
  - !ruby/object:Gem::Version
20
- version: 6.0.0.beta1
20
+ version: 6.0.1.rc1
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.0.0.beta1
27
+ version: 6.0.1.rc1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: nio4r
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -121,12 +121,15 @@ files:
121
121
  - lib/rails/generators/channel/templates/javascript/index.js.tt
122
122
  - lib/rails/generators/test_unit/channel_generator.rb
123
123
  - lib/rails/generators/test_unit/templates/channel_test.rb.tt
124
- homepage: http://rubyonrails.org
124
+ homepage: https://rubyonrails.org
125
125
  licenses:
126
126
  - MIT
127
127
  metadata:
128
- source_code_uri: https://github.com/rails/rails/tree/v6.0.0.beta1/actioncable
129
- changelog_uri: https://github.com/rails/rails/blob/v6.0.0.beta1/actioncable/CHANGELOG.md
128
+ bug_tracker_uri: https://github.com/rails/rails/issues
129
+ changelog_uri: https://github.com/rails/rails/blob/v6.0.1.rc1/actioncable/CHANGELOG.md
130
+ documentation_uri: https://api.rubyonrails.org/v6.0.1.rc1/
131
+ mailing_list_uri: https://groups.google.com/forum/#!forum/rubyonrails-talk
132
+ source_code_uri: https://github.com/rails/rails/tree/v6.0.1.rc1/actioncable
130
133
  post_install_message:
131
134
  rdoc_options: []
132
135
  require_paths:
@@ -142,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
145
  - !ruby/object:Gem::Version
143
146
  version: 1.3.1
144
147
  requirements: []
145
- rubygems_version: 3.0.1
148
+ rubygems_version: 3.0.3
146
149
  signing_key:
147
150
  specification_version: 4
148
151
  summary: WebSocket framework for Rails.