README.md in confuse-0.1.8 vs README.md in confuse-1.0.0

- old
+ new

@@ -1,14 +1,17 @@ -# Configuration +# Confuse -TODO: Write a gem description +This gem is used to simplify specifying and reading configuration. +You can define what you expect to be configured, and this can be read from ini +files, yaml files or environment variables. + ## Installation Add this line to your application's Gemfile: - gem 'configuration' + gem 'confuse' And then execute: $ bundle @@ -16,10 +19,115 @@ $ gem install configuration ## Usage -TODO: Write usage instructions here +Basic usage: + + config = Confuse.config do |conf| + conf.add_item :foo, :description => 'Foo', :default => 1 + end + + config[:foo] + config.foo + +Types: + +You can choose where and your config is stored by passing a :path variable to +Confuse.config: + + config = Confuse.config :path => 'config.ini' do |conf| + conf.add_item :foo, :description => 'Foo', :default => 1 + end + +Confuse will attempt to work out the type of file from the extension (Supports +.ini for ini files, and .yml or .yaml for yaml files). You can override this by +passing in a :type option: + + config = Confuse.config :path => 'foo.conf' :type => :yaml do |conf| + conf.add_item :foo, :description => 'Foo', :default => 1 + end + +If no type or path is given, it will default to environment variables. + +Environment variables have one extra feature, which is the ability to provide a +prefix: + + + config = Confuse.config :prefix => 'FOO' :type => :yaml do |conf| + conf.add_item :foo, :description => 'Foo', :default => 1 + end + +This means Confuse will lookup environment varialbles with that prefix with an +underscore followed by the configuration name. If none is given, it will lookup +environment variables as is. + +Namespaces: + +You can separate your configuration into different namespaces: + + config = Confuse.config :type => :env do |conf| + conf.add_namespace :foo do |ns| + ns.add_item :foo, :description => 'Foo', :default => 1 + end + end + +For simplicity, you can fetch these items using a single []: + + config[:foo_bar] + +Or a method call: + + config.foo_bar + +However, beware of adding an item at the top level with the same name. + +Check: + +If you want to make sure all your configuration items are in place before +running the program you can call .check on it. + + config = Confuse.config do |conf| + conf.add_item :foo, :description => 'Foo', :default => 1 + end + + config.check + +If any of the items haven't been set, and don't have a default value, an +exception will be thrown. If you don't care about certain variables, you can +pass :required => false to them (or give them a default value). + +Use a different source: + +If you want to use a source that isn't an ini file or yaml file, or environment +variable. It is very easy to create your own one. It simply needs to be a class +that has an initialize that takes a hash, and a [] method that takes a +namespace and a key argument. + + class MyOwnSource + def initialize(options = {}) + ... + end + + def [](namespace, key) + ... + end + end + + Confuse::Source.register(:foo, MyOwnSource) + + definition = Confuse.config, :type => :foo do |conf| + conf.add_item :foo + end + + config = Confuse::Config.new(definition, my_own_source) + +If your class takes a :path variable, it will autodetect the extension for +whatever you register. You can register more than one extension if you wish. + +You could use this to store data in whatever fancy file format you like, or +perhaps even a database table, or one of those fancy NoSQL datastores, you +could even write your config in Ruby code. ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`)