Commit Graph

755 Commits

Author SHA1 Message Date
Hartley McGuire
6640b85b69
Fix md label-lists rendering incorrectly
When converting docs from RDoc to Markdown, some label-lists ended up
not rendering properly. This appears to be due to RDoc's Markdown
parser not recognizing label-list labels if the label has additional
markup around it (in this case, bold markers `**`).

Additionally, the markdown label-list was missing newlines between list
items which also caused the label-list to not render correctly.

This commit fixes both of these issues for cases where the RDoc
originally used <b> tags in a label-list label. Since label-list labels
will already be bolded, there is no reason to also use `**` on the
labels.
2024-03-06 18:11:14 -05:00
Jean Boussier
7263da542b Deprecate ConnectionPool#connection
Replaced by `#lease_connection` to better reflect what it does.

`ActiveRecord::Base#connection` is deprecated in the same way
but without a removal timeline nor a deprecation warning.

Inside the Active Record test suite, we do remove `Base.connection`
to ensure it's not used internally.

Some callsites have been converted to use `with_connection`,
some other have been more simply migrated to `lease_connection`
and will serve as a list of callsites to convert for
https://github.com/rails/rails/pull/50793
2024-03-01 14:32:55 +01:00
Sean Doyle
cfab11c959 Action Cable assert_broadcasts API docs [ci skip]
Follow-up to [#48798][]
Reverts [#47837][]

The `capture_broadcasts` helper was introduced in [#48798][] to remove
the return value from the `assert_broadcasts` call. The behavior was
changed, but the corresponding documentation for the `assert_broadcasts`
method did not revert the changes added in [#47837][].

This change should probably also get backported to `7-1-0-stable`.

[#47837]: https://github.com/rails/rails/pull/47837
[#48798]: https://github.com/rails/rails/pull/48798

Co-authored-by: Matheus Richard <matheusrichardt@gmail.com>
2024-02-19 10:39:43 -05:00
Jun Jiang
d5786b2e9d ActionCable: Use ... to passthrough args 2024-02-17 05:28:42 +08:00
Jun Jiang
08cb349a4b ActionCable: avoid potential nil error 2024-02-17 05:28:42 +08:00
Jun Jiang
0df0947b70 ActionCable: Allow pass code and reason when closing a WebSocket connection 2024-02-17 05:28:42 +08:00
Yasuo Honda
aafbf0a4a7
Merge pull request #51040 from hendrixfan/remove-rollup-option
remove unknown rollup input option breakOnWarning
2024-02-14 11:40:05 +09:00
Wolfgang Fournès
33e5ce5fce remove unknown rollup input option breakOnWarning
As seen in https://buildkite.com/rails/rails/builds/104749#018d92dc-79b9-42bc-9a8c-bbcf5681f9eb/1165-1176 breakOnWarning does not seem to be a valid option for Rollup. I cannot find in the documentation, and therefore I think it can safely be removed.
2024-02-10 14:05:39 +01:00
Rafael Mendonça França
6fdd31d7db
Transform actioncable documentation to Markdown 2024-02-10 00:11:26 +00:00
Jean Boussier
cc63348160 Replace some low value dynamic delegator by handcrafted ones
Dynamic delegation make sense when there is a long list of methods
etc. But for very simple cases, writing one or two methods by hand
is just clearer and more efficient.
2024-01-25 11:51:00 +01:00
Jean Boussier
bffe05f246 Module#delegate stop accepting the private as: parameter
The feature remains usable internally, but via `ActiveSupport::Delegation`,
this way we don't allow third party use.
2024-01-25 11:51:00 +01:00
Petrik
8565f45100 Use relative includes of README's in documentation [ci-skip]
The Rails documentation uses the `:include:` directive to inline the
README of the framework into the main documentation page. As the
README's aren't in the root directory from where SDoc is run we need to
add the framework path to the include:

    # :include: activesupport/README.md

This results in a warning when installing the gems as generating the rdoc for the gem is run from the gem/framework root:

    Couldn't find file to include 'activesupport/README.rdoc' from lib/active_support.rb

The `:include:` RDoc directive supports includes relative to the current
file as well:

    # :include: ../README.md

This makes sure it works for the Rails API docs and the separate gems.

Co-authored-by: Jonathan Hefner <jonathan@hefner.pro>
2024-01-18 10:39:15 +01:00
Junichi Sato
523f86964f
Rename #assert_not_has_stream #assert_has_no_stream
This is a follow-up to https://github.com/rails/rails/pull/50585.

I propose to provide smoother reading experiences with the two methods
introduced in there, `#assert_not_has_stream` and `#assert_not_has_stream_for`,
by renaming them `#assert_has_no_stream` and `#assert_has_no_stream_for`, respectively.
2024-01-05 11:29:21 +09:00
Sebi
d9e2b159f9 Add assertions for stopped ActionCable streams
This adds two new assertion methods for ActionCable test cases:
`assert_not_has_stream` and `assert_not_has_stream_for`. These methods
can be used to assert that a stream has been stopped, e.g. via
`stop_stream` or `stop_stream_for`.
2024-01-04 19:41:35 +00:00
Zane Wolfgang Pickett
f634121c3d
Fix self is undefined for actioncable within ssr build systems by replacing it globalThis 2024-01-03 19:19:50 +00:00
Jean Boussier
6ba2fdb2fe Bump the required Ruby version to 3.1.0
Until now, Rails only droped compatibility with older
rubies on new majors, but I propose to change this policy
because it causes us to either keep compatibility with long
EOLed rubies or to bump the Rails major more often, and to
drop multiple Ruby versions at once when we bump the major.

In my opinion it's a bad alignments of incentives. And we'd
be much better to just drop support in new minors whenever they
go EOL (so 3 years).

Also Ruby being an upstream dependency, it's not even
a semver violation AFAICT.

Since Rails 7.2 isn't planned before a few months, we
can already drop Ruby 3.0 as it will be EOL in March.
2023-12-31 08:54:03 +01:00
Jean Boussier
be258503ac Module#delegate takes a new private as parameter
This is a continuation of https://github.com/rails/rails/pull/46875

The behavior of looking up the class method when `to: :class` is passed
is a bit error prone because it silently degrades.

By passing the expected owner of the delegated method, we can be more
strict, and also generate a delegator in a module rather than having
to do it at inclusion time.

I made this argument private API because we want it in Rails, but
I'm worried it might be a bit too sharp for public API. I can
be convinced otherwise though.
2023-12-08 15:09:59 +01:00
Jonathan Hefner
4dcd6ba8d3 Update .gitattributes for generated JavaScript [ci-skip]
This adds `linguist-generated` and `linguist-vendored` attributes where
appropriate to suppress the files in diffs and exclude the files from
the project's language stats on GitHub.

See https://github.com/github/linguist for more information.
2023-11-05 15:48:08 -06:00
Jonathan Hefner
8e213f72dd Update JavascriptPackageTest for Action Cable
Prior to this commit, if `app/javascript/action_cable/index.js`
contained a syntax error, `JavascriptPackageTest` would still pass
because `system "yarn build"` would simply return `false` and the
compiled output would not change.  This commit adds `exception: true` to
the `system` call so that an error will be raised if `yarn build` fails.

Also, since 4a23cb3415eac03d76623112576559a722d1f23d, Active Storage
compiles additional `app/assets/javascripts/actioncable.js` and
`app/assets/javascripts/actioncable.esm.js` files (with
`app/assets/javascripts/action_cable.js` being deprecated).  This commit
adds assertions for those files as well.
2023-11-05 15:13:30 -06:00
Nikita Vasilevsky
19f8ab2e7d
[Tests only] Enable Minitest/AssertPredicate rule 2023-10-13 19:26:47 +00:00
Jonathan Hefner
3534c40c33 Move example to API docs [ci-skip] 2023-10-07 11:55:34 -05:00
Jonathan Hefner
eac107cfa9 Link to ActionCable::Connection callback methods [ci-skip] 2023-10-07 11:52:34 -05:00
Jonathan Hefner
53a75d4082 Move after_subscribe note to after_subscribe doc [ci-skip] 2023-10-07 11:52:33 -05:00
Jonathan Hefner
b14b9ce6b9 Link to ActionCable::Channel callback methods [ci-skip] 2023-10-07 11:52:33 -05:00
Bart de Water
95b6fbd00f Stop building AS::Notifications::Event manually
It's possible since Rails 6 (3ea2857943dc294d7809930b4cc5b318b9c39577) to let the framework create Event objects, but the guides and docs weren't updated to lead with this example.

Manually instantiating an Event doesn't record CPU time and allocations, I've seen it more than once that people copy-pasting the example code get confused about these stats returning 0. The tests here show that - just like the apps I've worked on - the old pattern keeps getting copy-pasted.
2023-09-29 12:34:23 -04:00
Jean Boussier
2da1852ac9 Delay Adapter#check_version to #configure_connection
Ideally we should be able to checkout an Adapter instance without
triggering a connection to the server.

For some adapters like Trilogy that is the case today, but only if
you have a schema cache loaded, otherwise `check_version` will trigger
a query.

I think this check can be delayed to when we actually use the connection.
2023-09-29 08:53:16 +02:00
Rafael Mendonça França
fb6c6007d0
Development of Rails 7.2 starts now
🎉
2023-09-27 03:59:11 +00:00
Rafael Mendonça França
e5386cb402
Preparing for 7.1.0.rc1 release 2023-09-27 03:08:31 +00:00
Rafael Mendonça França
699dfdb426
Preparing for 7.1.0.beta1 release 2023-09-13 00:36:01 +00:00
Jason Meller
274bc97d63
Add Bun support (#49241)
* Add Bun support to `rails new -j` generator

* Add additional generation consideration for Bun

* Use development gems to test the whole workflow

* Remove custom gems from local testing

* Revert lock

* Revert errant custom gem declaration

* Fix linting errors

* Fix remnants of bad merge

* Always use latest bun

* Update actioncable/lib/rails/generators/channel/channel_generator.rb

Co-authored-by: Cadu Ribeiro <mail@cadu.dev>

* Update guides/source/working_with_javascript_in_rails.md

Co-authored-by: Rafael Mendonça França <rafael@franca.dev>

* Only use the latest bun if nothing is specified

* Hardcode known good version

---------

Co-authored-by: Cadu Ribeiro <mail@cadu.dev>
Co-authored-by: Rafael Mendonça França <rafael@franca.dev>
2023-09-12 16:55:27 -04:00
Hartley McGuire
c3c844ef3a
Add Rack::Lint to ActionCable::Server health tests
This adds additional coverage to ActionCable::Server to validate that
its output follow the Rack SPEC.

In addition to using Rack::CONTENT_TYPE for the Content-Type header,
there was another change required: the Content-Type header cannot be
specified when the Response status is 204, so the default health check
status was updated to 200
2023-08-16 22:49:32 -04:00
Alex Ghiculescu
455e922b49
Introduce capture_emails and capture_broadcasts (#48798) 2023-07-25 06:42:54 +02:00
Marcin Henryk Bartkowiak
bcf9e3de0c Do not inspect transmit data if logger is not debug-enabled 2023-07-20 18:52:26 +02:00
Marcin Henryk Bartkowiak
99d7dc88ae Add block support to TaggedLoggerProxy 2023-07-20 18:26:10 +02:00
julianfssen
9c5175e067 Delegate StubConnection#pubsub and StubConnection#config to ActionCable.server
Previously, `ActionCable::Channel::ConnectionStub` would
throw a `NoMethodError` when the channel under test calls
`stop_stream_for`, as shown in the example below:

```ruby
class ChatChannel < ActionCable::Channel::Base
  def subscribed
    stream_from "test"
  end

  def unsubscribed
    stop_stream_from "test"
  end
end

class ChatChannelTest < ActionCable::Channel::TestCase
  test "unsubscribe" do
    stub_connection

    subscribe

    # `unsubscribe` raises `NoMethodError` as `pubsub` does not
      exist on `ActionCable::Channel::ConnectionStub`
    unsubscribe

    assert_no_streams
  end
end
```

Calling `unsubscribe` causes an exception as `stop_stream_from` calls
`pubsub` when unsubscribing, which is not implemented in
`ActionCable::Channel::ConnectionStub`.

This commit fixes this issue by assigning the `ActionCable.server`
singleton to a `@server` instance variable in
`ActionCable::Channel::ConnectionStub`. This lets us delegate
the `config` and `pubsub` method calls to it.
2023-07-15 13:04:46 +08:00
zzak
dd89f600f7
🔗 Remove RDoc auto-link from Rails module everywhere 2023-06-23 10:49:30 +09:00
Rafael Mendonça França
74b8a3798b
Merge pull request #48222 from JoeDupuis/health-check-standalone-cable
Add health check on standalone Action Cable
2023-05-30 16:35:12 -04:00
Jean Boussier
d381d249d7
Merge pull request #48321 from moofkit/fix-sentinels-config-with-strings-arguments
Fix ActionCable Redis configuration with sentinels
2023-05-29 09:55:31 +02:00
zzak
722d4f6582
Unlink Rails constant from READMEs 2023-05-29 15:14:44 +09:00
Dmitriy Ivliev
f1ace63973 Fix ActionCable Redis configuration with sentinels
This commit resolves an integration bug between ActionCable and Redis >= 5.0 when using sentinels configuration.
The issue arises from the fact that the sentinels configuration is a nested array of hashes, while the Redis client expects keys to be symbols.
This fix modifies the preparation of the Redis configuration to ensure that all keys are represented as symbols.
2023-05-28 11:57:23 +00:00
Joé Dupuis
32e7028aa1 Add health check on standalone Action Cable
Action Cable can be mounted standalone, but it loses the health check
route provided by the railties.
This change adds configuration for a health check rack app and a
health check route to "mount" the rack app.

Fixes #48185
2023-05-27 16:59:34 -07:00
zzak
38bef29064
Replace all occurrences of '<tt>(\w+::\w+::\w+)</tt>' with '+$1+'
E.g.:

* <tt>Rails::Command::NotesCommand</tt> -> +Rails::Command::NotesCommand+

Co-authored-by: Hartley McGuire <skipkayhil@gmail.com>
2023-05-25 06:56:17 +09:00
zzak
e3c73fd183
Replace all occurrences of '<tt>(\w+::\w+)</tt>' with '+$1+'
E.g.:

* <tt>ActiveRecord::Base</tt> -> +ActiveRecord::Base+

Co-authored-by: Hartley McGuire <skipkayhil@gmail.com>
Co-authored-by: Petrik de Heus <petrik@deheus.net>
2023-05-25 06:52:32 +09:00
Petrik
c4f0c10157 Clean up Action Cable documentation headers [ci skip] 2023-04-22 20:40:55 +02:00
Petrik
ba40945fe5 Add missing headers to Action Cable docs [ci-skip] 2023-04-02 10:20:50 +02:00
sampatbadhe
bcda8dbfad update assert_broadcasts example to include changes introduced in PR #47793 by @ghiculescu - Action Cable's assert_broadcasts return the messages that were broadcast to analyse further. 2023-04-01 15:46:42 +05:30
Jean Boussier
6879f89892
Merge pull request #47793 from ghiculescu/assert_broadcasts-return-messages
`assert_broadcasts`: return the messages that were broadcast
2023-03-31 11:52:07 +02:00
Petrik de Heus
dc0f20595d
Merge pull request #47717 from p8/docs/include-readmes
Include READMEs in main framework pages of the API documentation
2023-03-30 16:43:14 +02:00
Alex Ghiculescu
c3c8abfbd7 assert_broadcasts: return the messages that were broadcast
This PR is similar to https://github.com/rails/rails/pull/47025, it makes Action Cable's `assert_broadcasts` return the messages that were broadast. This way you can do more analysis on them:

```ruby
    messages = assert_broadcasts("test", 2) do
      ActionCable.server.broadcast "test", { message: "one" }
      ActionCable.server.broadcast "test", { message: "two" }
    end
    assert_equal 2, messages.length
    assert_equal({ "message" => "one" }, messages.first)
    assert_equal({ "message" => "two" }, messages.last)
```

This is helpful if you expect lots of messages to be broadcast or if you want to only match on some element of the data; `assert_broadcast_on` doesn't work well in either of those scenarios.
2023-03-28 11:49:28 -06:00
Vladimir Dementyev
5c4c794ab1
fix(ac-redis): rescue BaseConnectionError in redis <5 2023-03-27 17:21:46 -04:00