Présentation de SettingsLogic
SettingsLogic est une gem permettant d’accéder par l’intermédiaire d’une classe au contenu d’un fichier de configuration au format YAML. Dans ce dernier, nous allons définir tous les paramètres dont nous avons besoin en fonction de chaque environnement, comme par exemple l’adresse email d’expédition des message envoyés par le site. La valeur correspondante à l’environnement en cours sera ensuite disponible dans notre application.
Installation
Nous ajoutons au fichier config/environment.rb la gem SettingsLogic, dépaquetons le code et versionnons le tout :
# config/environnement.rb
config.gem 'settingslogic'
$ sudo rake gems:install
$ rake gems:unpack:dependencies
$ git add .
$ git commit -am "SettingsLogic"
Configuration
Nous commençons par créer la classe Settings nous permettant d’accéder aux différents paramètres :
# app/models/settings.rb
class Settings < Settingslogic
source "#{Rails.root}/config/application.yml"
namespace Rails.env
load!
end
Nous voyons ici que le fichier de paramétrage est lu, puis les paramètres sont chargés en fonction de l’environnement dans lequel est exécutée l’application.
Nous créons ensuite deux versions de ce fichier. L’une application.yml.default sera versionnée, l’autre application.yml ignorée. Cela permet à chaque développeur de définir les paramètres en fonction de son environnement de travail, et de ne pas versionner les paramètres utilisés en production (cf. l’article sur le déploiement avec Capistrano).
# config/application.yml.default
defaults: &defaults
emails:
contact: contact@example.com
from: no-reply@example.com
par_page: 10
dynamique: <%= 1 + 2 %>
development:
<<: *defaults
par_page: 20
test:
<<: *defaults
production:
<<: *defaults
# config/application.yml
defaults: &defaults
emails:
contact: contact@monsite.com
from: no-reply@monsite.com
par_page: 10
development:
<<: *defaults
par_page: 20
test:
<<: *defaults
production:
<<: *defaults
Nous voyons ici que SettingsLogic est flexible, il permet de définir des paramètres imbriqués, d’utiliser ERB, etc.
Nous ajoutons au fichier .gitignore le fichier de configuration :
# .gitignore
config/application.yml
Puis nous versionnons la classe Settings et les paramètres par défaut :
$ git add .
$ git commit -am "Configuration par défaut"
Accès aux paramètres
Nous pouvons maintenant accéder aux paramètres de configuration dans l’application. Par exemple, pour utiliser les emails dans un formulaire de contact :
# app/models/contact_mailer.rb
class ContactMailer < ActionMailer::Base
def contact(contact)
subject "Nouveau contact"
from Settings.emails.from
recipients Settings.emails.contact
sent_on Time.now
body :contact => contact
end
end
L’email de contact aura pour expéditeur et destinataire les emails correspondants définis dans le fichier de paramétrage. SettingsLogic permet également de donner une valeur par défaut si un paramètre n’est pas défini :
par_page = Settings.pagination['articles_par_page'] ||= 10
Ici par_page aura pour valeur 10 car articles_par_page n’est pas défini dans les paramètres.