Usando o autoloading do ActiveSupport
Leia em 1 minuto
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:
source 'https://rubygems.org'
gem 'sinatra', require: false
gem 'dotenv'
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.
require 'bundler/setup'
require 'sinatra/base'
# Load environment variables
require 'dotenv'
Dotenv.load '.env', ".env.#{Sinatra::Application.environment}"
# Load dependencies
Bundler.setup :default, Sinatra::Application.environment
Bundler.require
# Set autoloading directories
ActiveSupport::Dependencies.autoload_paths += %w[
app/models
app/endpoints
]
# Load initializers
Dir['./config/initializers/**/*.rb'].each do |file|
require file
end
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.