Simple Rails Config
There are a lot of Rails config options around, but despite this, I thought I’d share mine.
My design goals for this were:
- Once the configuration was loaded, it would be stored in memory for the next time it was required.
- Nice usage syntax, like
config.authentication.passwordrather than the oft-usedconfig[:authentication_password]. - Zero dependencies outside what is already included in Rails.
config/app.yml
# Rails Config. # Copyrighted(c) Douglas F Shearer 2009 # Licensed under The MIT License. site: url: http://example.com authentication: username: bob@example.com password: myhackproofpassword flickr: api_key: d3c3576398a4876c920553b714bc177f username: flickrusername # Akismet. wordpress: api_key: 876c920553b7
config/initializers/config.rb
# Rails Config Loader. # Copyrighted(c) Douglas F Shearer 2009 # Licensed under The MIT License. module Config class ConfigStore # Takes a hash as an argument. # If this hash contains other hashes, these too will turned into # ConfigStore objects. def initialize(contents) @contents = contents @contents.each do |k, v| if v.is_a?(Hash) @contents[k] = self.class.new(v) end end end def method_missing(sym, *args) @contents[sym.to_s] || super end end def config @@config ||= ConfigStore.new(YAML.load_file("#{RAILS_ROOT}/config/app.yml")) end end include Config
Usage
With both these files in place, we can now call the config from anywhere in our app:
>> config.authentication.username => "bob@example.com" >> config.authentication.password => "myhackproofpassword"
I’ll probably add overrides for environment specific configuration in the future, but this covers most of my needs for now.









Ariejan de Vroom
December 01 2009 09:27This looks very much like all the other options like SettingsLogic and Configatron.
Why did you write this? What's wrong with the other options that made you invest your time into making this?