Module: ConfigLoader

Defined in:
lib/config_loader.rb,
lib/config_loader/map.rb,
lib/config_loader/missing_config_file_error.rb,
lib/config_loader/missing_config_file_name_error.rb

Defined Under Namespace

Classes: Map, MissingConfigFileError, MissingConfigFileNameError

Class Method Summary collapse

Class Method Details

.load(file_name, running_env = default_running_env, project_root = default_project_root) ⇒ Object

Let’s assume that you have the special file config/database.yml in your Rails project. In this example, you are using CouchDB as your database. This file has the content below:

development:
  server: localhost
  port: 5984
  database_name: addressbook_development

test:
  server: localhost
  port: 5984
  database_name: addressbook_test

production:
  server: production.server.com
  port: 5984
  database_name: addressbook_production

In order to access the database configuration for your current environment, you’d write, for instance:

db_config = ConfigLoader.load('database')
db_config['server']                     # localhost
db_config['port']                       # 5984
db_config['database_name']              # addressbook_development

We’re assuming that your current environment is development.

You can get the configuration of a specific running environment writing this:

db_config = ConfigLoader.load('database', 'production')
db_config['server']                     # production.server.com
db_config['port']                       # 5984
db_config['database_name']              # addressbook_production

You can specify the project root too. If you don’t, it will assume the project root is Rails.root. To change it, write:

db_config = ConfigLoader.load('database', 'production')
db_config = ConfigLoader.load('database', 'test', '/home/user/my_special_project_root')

Dinamic keys are also accepted. They’re parsed using ERB. So, you’re free to write a config file like this:

test:
  server: <%= `hostname` %>
  port: 5984
  database_name: addressbook_test


50
51
52
# File 'lib/config_loader.rb', line 50

def self.load(file_name, running_env = default_running_env, project_root = default_project_root)
  ConfigLoader::Map.new(file_name, running_env, project_root).load
end