Go to English Blog

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.