Usando o autoloading do ActiveSupport - Nando Vieira
O ActiveSupport é uma daquelas bibliotecas que sempre me surpreende. Amada por muitos, odiada por tantos outros, o ActiveSupport tem uma série de funcionalidades que uso mesmo em projetos que não são relacionados com Ruby on Rails.
Uma das funcionalidades que uso principalmente em projetos Sinatra é o autoloading. Quando você desenvolve com Ruby on Rails por algum tempo, ter que lidar com ordem de carregamento de constantes é sempre muito chato. No entanto, com o ActiveSupport esta tarefa se torna muito simples e, o melhor de tudo, transparente.
Embora o ActiveSupport seja uma biblioteca grande, ela é totalmente modular, permitindo que você carregue apenas o que você precisa. No seu arquivo Gemfile, carregue apenas os módulos que você precisa, como no exemplo à seguir:
gem 'activesupport', require: %w[
active_support/dependencies
Agora, no arquivo de boot do seu projeto, carregue o Bundler e suas dependências. No exemplo à seguir mostro como defino o arquivo boot.rb dos meus projetos Sinatra.
Dotenv.load '.env', ".env.#{Sinatra::Application.environment}"
Bundler.setup :default, Sinatra::Application.environment
# Set autoloading directories
ActiveSupport::Dependencies.autoload_paths += %w[
app/endpoints
Dir['./config/initializers/**/*.rb'].each do |file|
Pronto! O ActiveSupport irá procurar os arquivos definidos nos diretórios app/models e app/endpoints toda vez que a exceção NameError for lançada, sem que você precise carregar os arquivos manualmente.