Let Action Cable's autoloader ignore the version file

Rails components version files are organized in a particular way.

On one hand, ActionCable::VERSION is defined in action_cable/gem_version.rb, but
that file does not follow Zeitwerk conventions, so we ignore it.

Addtionally, action_cable/gem_version.rb defines ActionCable.gem_version, and we
need to eager load it to have that method available for client code.

On the other hand, there is also action_cable/version.rb, which loads
action_cable/gem_version.rb. That file follows the conventions because by
loading it, the expected constant gets defined as a side-effect, but it does so
in an unusual indirect way.

All in all, the setup that we had technically works, but setting an autoload for
VERSION in ActionCable makes you think too much about the interactions between
these two files and the autoloads triggered by the existing require_relative,
which eager loads anyway.

I believe this simplification is easier to understand.
This commit is contained in:
Xavier Noria 2024-04-22 19:52:58 +02:00
parent cc9d0b9a4c
commit b05603f6e4

@ -31,6 +31,7 @@
loader.ignore(
"#{__dir__}/rails", # Contains generators, templates, docs, etc.
"#{__dir__}/action_cable/gem_version.rb",
"#{__dir__}/action_cable/version.rb",
"#{__dir__}/action_cable/deprecator.rb",
)