Summary

Application level configuration.

Features

* simple YAML config files
* config files support ERB
* config files support inheritance
* access config information via convenient object member notation

Basic Usage

You simply write a configuration file in YAML. Notice you can use ERB.

config.yml

aws:
  access_key: 123ABC
  secret_key: ABC123
now: <%= Time.now %>
servers: [ {name: example1.com}, {name: example2.com} ]

Then somewhere in your code, you create a global constant from the config file. Then access the config data via object member notation.

code

::AppConfig = ApplicationConfiguration.new("config.yml")
AppConfig.aws.access_key  # => "123ABC"
AppConfig.aws.secret_key  # => "ABC123"
AppConfig.now             # => Tue May 05 21:55:15 -0500 2009
AppConfig.servers[0].name # => "example1.com"

Inheritance

You can have a second config file that is recursively merged with the first config file.

base.yml

app_name:  MyCoolApp
domain:  dev.mycoolapp.com

production.yml

domain:  www.mycoolapp.com

code

::AppConfig = ApplicationConfiguration.new("base.yml", "production.yml")
AppConfig.app_name # => "MyCoolApp"
AppConfig.domain   # => "www.mycoolapp.com"

Using in a Rails app

You just need to create an initializer that looks something like this.

require 'app_config'
::AppConfig = ApplicationConfiguration.new(RAILS_ROOT+"/config/app_config.yml",
                                           RAILS_ROOT+"/config/environments/#{RAILS_ENV}.yml")

If you installed this as a Rails plugin instead of a gem, that code is already run for you in the plugin’s init.rb.

Author

Christopher J. Bottaro