Marcio Trindade

Settingslogic

A gem settingslogic é uma forma simples de consumir arquivos de configuração em uma applicação rails. Já faz alguns anos que utilizo nos meu projetos e recomendo pra quem ainda não a usa.

Esses dias trabalhei em um projeto e vi o pessoal usando uma constante CONFIG que carrega um arquivo config.yml dentro do environment.rb ou em um initializer qualquer. Basicamente o settingslogic tem a mesma funcionalidade a diferença é que em vez de ficar criando constantes você cria um model e este model responde como método, através de method_missing pra cada item do yml. Veja abaixo dois exemplos pra entender esta diferença.

config.yml
development: &defaults
  site:
    name: 'Nome do meu site'
    domain: 'meudominio.com.br'
  paginate:
    per_page: 25
test:
  <<: *defaults

production:
  <<: *defaults

Usando como contante seria assim:

config/initializers/app_config.rb
config = YAML.load_file("#{Rails.root}/config/config.yml") || {}
APP_CONFIG = config[Rails.env] || {}
app/views/layouts/application.html.erb
<!DOCTYPE HTML>
<html>
<head>
  <title><%= APP_CONFIG["site"]["name"]) %></title>
</head>
<body>
  <%= yield  %>
</body>
</html>

Agora vejamos como seria usando com settingslogic.

app/models/app_config.rb
class AppConfig < Settingslogic
  source "#{Rails.root}/config/config.yml"
  namespace Rails.env
end
app/views/layouts/application.html.erb
<!DOCTYPE HTML>
<html>
<head>
  <title><%= AppConfig.site.name %></title>
</head>
<body>
  <%= yield  %>
</body>
</html>

Como vocês podem ver o resultado é o mesmo, porém de forma mais elegante.

Deixem seus comentários e até a próxima.