0.0
No commit activity in last 3 years
No release in over 3 years
This gem offers you a convenient settings structure for parameterizing your application. Those settings are read from a YAML file. Inheritance of settings (like in development modes) and multiple settings groups are available. Great for a rails app but can be used for any ruby app.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

>= 0
>= 0

Runtime

 Project Readme

settings-tree¶ ↑

Introduction¶ ↑

This gem offers you a convenient settings structure for parameterizing your applications.

The good things over similar gems is the ability to have deep, recursive structures and the ability to have ‘specialized’ config according to the environment.

Example :

Settings.web_app.root_url               => 'localhost:3000'

Settings.web_app.infos.company_name     => 'Acme'
Settings.web_app.infos.app_name         => 'Coffe maker'

Settings.web_app.engine.workers_count   => 3

Those settings are read from a YAML file, like this one :

# YAML private config file
# XXX Beware ! This is YAML : indention with spaces only ! XXX

####### Common / default values #######
defaults:
  root_url: localhost:3000
  public_access: true

  infos:
    company_name: 'Acme'
    app_name: 'Coffe maker'
    copyright_starting_year: 2011
    legend: 'A superb app which does ...'

  engine:
    workers_count: 3
    auto_manage_workers: true
    auto_manage_workers_redirect_output: true

####### production environment #######
production:
# nothing special

####### development environment #######
development:
  engine:
    auto_manage_workers_redirect_output: false

####### test environment #######
test:
  engine:
    workers_count: 0

The common settings reside under a root named ‘defaults’. Other roots (‘production’, ‘development’…) will be picked depending on the environment. (more about that later)

This gem has more good features, keep reading.

Ideas taken from : kpumuk.info/ruby-on-rails/flexible-application-configuration-in-ruby-on-rails/

Installation¶ ↑

Available as a gem in rubygems, the default gem repository :

gem 'settings-tree'

Isn’t that easy ? (Thank you jeweler for making everything so easy)

Use¶ ↑

You can uses several, independent ‘groups’.

Just register a settings group from a file :

Settings.register_settings_file('web_app', File.join(File.dirname(__FILE__), "config/config_web_app.yml"))

or for ruby on rails :

(put this line in an initializer in config/initializer)
Settings.register_settings_file('web_app', File.join(::Rails.root.to_s, "config/config_web_app.yml"))

Note : of course, the group name must be a valid keyword, able to be converted to a sym.

And now you can access your settings from anywhere :

Settings.web_app.infos.company_name     => 'Acme'

(considering the YAML file given previously)

You can register any number of group you want :

Settings.register_settings_file('web_game', File.join(File.dirname(__FILE__), "config/config_web_game.yml"))

example, with this file :

####### Common / default values #######
defaults:
  guild_name: 'gang'
  party_size: 4

gives :

puts Settings.web_game.guild_name   => 'gang'

It’s common to have settings that you don’t want under version control (accounts, passwords). A solution is to use a complementary file not under version control (thanks to a gitignore for example). Just use :

Settings.register_settings_file('web_app', File.join(File.dirname(__FILE__), "config/config_complement.yml"))

Since the ‘web_app’ group already exists, data will be merged, the new one taking precedence in case of conflicts. (Precedence is set according to the order of declaration.) (All the source files are memorized, this is a complement, not a replacement.)

In case you want to reload the settings, you have two functions for that :

Settings.reload_all
Settings.reload_group('web_app')

(You may need that in development mode)

Advanced use¶ ↑

Note : since those functions are rarely used, they don’t have ‘Settings.’ shortcuts. Don’t mind, it’s the same.

Environment¶ ↑

In a rails app, the environment will be taken automatically from ‘Rails.env’. If not under a rails app or if the environment is not available, you may want to set it manually :

SettingsHolder.instance.set_environment('test')

(The existing files/groups will automatically be reloaded to take that into account.)

Reset¶ ↑

You may also want to reset all the settings (everything will be forgotten) :

SettingsHolder.instance.reset

Debug¶ ↑

A convenient debug function to see all the settings and their values :

SettingsHolder.instance.debug_inspect

Contributing to settings-tree¶ ↑

  • Check out the latest master to make sure the feature hasn’t been implemented or the bug hasn’t been fixed yet

  • Check out the issue tracker to make sure someone already hasn’t requested it and/or contributed it

  • Fork the project

  • Start a feature/bugfix branch

  • Commit and push until you are happy with your contribution

  • Make sure to add tests for it. This is important so I don’t break it in a future version unintentionally.

  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright © 2011 Offirmo. See LICENSE.txt for further details.