Home > front end >  Zeitwerk collapse namespacing to root level
Zeitwerk collapse namespacing to root level

Time:08-31

Zeitwerk's readme gives this example for collapsing namespaces:

booking.rb -> Booking

booking/actions/create.rb -> Booking::Create

To make it work that way, configure Zeitwerk to collapse said directory:

loader.collapse("#{__dir__}/booking/actions")

But I don't want to cut out the middle, I want to bring everything to root level namespacing.

I.e. instead of Booking::Actions::Create or Booking::Create I just want Create. How do I do this?

CodePudding user response:

The easiest way is to define /path/to/booking/actions as a root directory. Does that make sense in your application?

CodePudding user response:

collapse just removes the last directory in the path given, so if you want to remove two directories, run collapse for each directory.

E.g.

If you have /app/a/b/c/d.rb then you can bring d.rb up to no namespacing with:

loader.collapse("app/a/b/c")
loader.collapse("app/a/b")

Zeitwerk will look at d.rb as if it's within app/a/, and all subfolders of app/ are considered root level

  • Related