AppConfig

 ______                  ____                     ___                 
/\  _  \                /\  _`\                 /'___\ __             
\ \ \L\ \  _____   _____\ \ \/\_\   ___    ___ /\ \__//\_\     __     
 \ \  __ \/\ '__`\/\ '__`\ \ \/_/_ / __`\/' _ `\ \ ,__\/\ \  /'_ `\   
  \ \ \/\ \ \ \L\ \ \ \L\ \ \ \L\ \\ \L\ \\ \/\ \ \ \_/\ \ \/\ \L\ \  
   \ \_\ \_\ \ ,__/\ \ ,__/\ \____/ \____/ \_\ \_\ \_\  \ \_\ \____ \ 
    \/_/\/_/\ \ \/  \ \ \/  \/___/ \/___/ \/_/\/_/\/_/   \/_/\/___L\ \
             \ \_\   \ \_\                                     /\____/
              \/_/    \/_/                                     \_/__/

AppConfig does pretty much what all the other great application configuration plugins do, but requires even less configuration (I know, how meta). It reads your config from YAML files, supports nested options, and automatically reloads your changes in development mode.

It also has a README with cool ASCII art in it.

Install

Rails 2.x

Put this in your environment.rb:

config.gem 'appconfig'

That's it.

Rails 3

Add this to your Gemfile:

gem 'appconfig', :require => 'app_config'

That's it.

Usage

By default AppConfig will try to read config options from config/appconfig.defaults.yml and *.appconfig.yml.

# sample appconfig.defaults.yml

admins:

  tisho: 
    full_name: Tisho Georgiev
    email: [email protected]

  josh:
    full_name: Joshua Krall
    email: [email protected]

Inside your Rails app, you can access your configuration options using the AppConfig object.

@admin_name = AppConfig.admins.tisho.full_name

Since AppConfig's storage mechanism is something like the lovechild of HashWithIndifferentAccess and OpenStruct, you can access your configuration in a bunch of different ways.

AppConfig.admins.tisho
AppConfig[:admins].tisho
AppConfig[:admins][:tisho]
AppConfig['admins']['tisho']
AppConfig['admins'][:tisho]

You get the idea.

If you're prefer the OpenStruct methodized syntax for accessing configuration options, you can optionally provide a fallback value for an option that may not exist.

AppConfig.option_that_doesnt_exist('fallback')  #=> 'fallback'

Reloading

When running your app in your development environment, AppConfig reloads on every request. It does that by using Rails's ActionController::Dispatcher.to_prepare hook.

If you need to reload your configuration manually, you can run:

AppConfig.reload!

Found a bug?

By all means, drop us a line. Or better yet, fork the project, fix the bug and send us a pull request. We'll thank you for it.

Credits

AppConfig was extracted with little modification from the loving embrace of the TransFS codebase, which to this day helps businesses quickly and easily compare the best credit card processors. For more open-source love from TFS, please take a look at Stylist and FunnelCake.

License

Copyright (c) 2010 Joshua Krall & Tisho Georgiev, released under the MIT license