Skip to content

Commit

Permalink
Let Action Cable's autoloader ignore the version file
Browse files Browse the repository at this point in the history
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.

All in all, the setup that we had technically works, but I feel autoloading
action_cable/version.rb makes you think too much about the interactions between
these two files.

I think this simplification is easier to understand.
  • Loading branch information
fxn committed Apr 22, 2024
1 parent cc9d0b9 commit 14baddd
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion actioncable/lib/action_cable.rb
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,21 @@

Zeitwerk::Loader.for_gem.tap do |loader|
loader.ignore(
"#{__dir__}/rails", # Contains generators, templates, docs, etc.
# Contains generators, templates, docs, etc.
"#{__dir__}/rails",

# These two files set things up in a special way.
#
# action_cable/gem_version.rb is not autoloadable, because it does not
# define the expected constant. action_cable/version.rb is, but in an
# indirect way.
#
# We could configure the autoloader accordingly, but loading the files
# manually makes you think less.
"#{__dir__}/action_cable/gem_version.rb",
"#{__dir__}/action_cable/version.rb",

# Defines Rails.deprecator, which is not autoloadable.
"#{__dir__}/action_cable/deprecator.rb",
)

Expand All @@ -46,6 +59,7 @@
# :markup: markdown
# :include: ../README.md
module ActionCable
require_relative "action_cable/gem_version"
require_relative "action_cable/version"
require_relative "action_cable/deprecator"

Expand Down

0 comments on commit 14baddd

Please sign in to comment.