Summary

Application level configuration.

Author

Jacques Crocker Modified from Original Project (AppConfig by Christopher J. Bottaro)

Compatibility

Rails 2.1/2.2 and Merb 1.0

Installing on Merb

add this to your config: dependencies.rb and run thor merb:gem:install

dependency "merb_app_config"

Installing on Rails

script/plugin install git://github.com/merbjedi/app_config.git

Accessing the AppConfig object

After installing this plugin, the AppConfig object will be global available. Entries are accessed via object member notation:

AppConfig.my_config_entry

Nested entries are supported:

AppConfig.my_section.some_entry

Common config file

Config entries are compiled from

config/app_config.yml
config/app_config/settings.yml
config/app_config/#{environment}.yml
config/environments/#{environment}.yml
config/app_config/assets.yml
config/app_config/stylesheets.yml
config/app_config/javascripts.yml

settings defined in files that are lower in the list override settings higher

Reloading config files

You can reload the AppConfig from file at any time by running AppConfig.reload!

Environment specific config files

You can have environment specific config files. Environment specific config entries take precedence over common config entries.

Example development environment config file:

RAILS_ROOT/config/environments/development.yml

Example production environment config file:

RAILS_ROOT/config/environments/production.yml

Embedded Ruby (ERB)

Embedded Ruby is allowed in the configuration files.  See examples below.

Accessing Configuration Settings

Consider the two following config files.

RAILS_ROOT/config/app_config.yml:

size: 1
server: google.com

RAILS_ROOT/config/environments/development.yml:

size: 2
computed: <%= 1 + 2 + 3 %>
section:
  size: 3
  servers: [ {name: yahoo.com}, {name: amazon.com} ]

Notice that the environment specific config entries overwrite the common entries.

AppConfig.size -> 2
AppConfig.server -> google.com

Notice the embedded Ruby.

AppConfig.computed -> 6

Notice that object member notation is maintained even in nested entries.

AppConfig.section.size -> 3

Notice array notation and object member notation is maintained.

AppConfig.section.servers[0].name -> yahoo.com
AppConfig.section.servers[1].name -> amazon.com

Managing Asset Files with AppConfig

Defining stylesheets: and/or javascripts: keys will allow you to easily manage lists of assets via config

javascripts:

- application.js
- prototype_scriptaculous:
  - prototype.js
  - scriptaculous/effects.js
- base:
  - libraries/*.js

All * file paths will be expanded out into a full list of files.

To add these javascripts to your layout just run

<%= javascripts_from_config %>

This will group the assets by key in order to use the built in Bundling