Rails - Add configuration for Zeitwerk to get perfect namespaces
This TIL came from Rails Viewcomponent Tips post.
By default, the Rails auto-loader - Zeitwerk will convert underscore_cased/
folder names into SentenceCased::
namespace.
But sometime, this is weird cause it’s what I want! For example, if I have a folder ui/
, by default, Zeitwerk loads them under the Ui::
namespace, rather than UI::
.
We can tweak with a custom Zeiwerk initializer in config/initializers/zeitwerk.rb
Rails.autoloaders.main.inflector.inflect("ui" => "UI")
So we can load class with a nice namespace. eg: UI::Button
rather than Ui::Button
, or FAQ
instead of Faq
.o