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
This gem is organized in a particular way with regard to versioning.

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 89979b6
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, and it defines
# the expected constant as a side-effect of loading the gem_version file.
#
# 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 89979b6

Please sign in to comment.