Smart Config

We have "smart" toothbrushes these days, so why not smart configuration?

Note: As you can see in the version number, this gem is still in a very early version, and you should expect that there may be breaking changes until we reach 1.0.

Usage

Smart Config allows you to define a static configuration and access it from anywhere within your application.
It will try to read the configuration from a YAML file, and fallback on environment variables.

Installation

Add the smart_gem dependency to you Gemfile:

gem 'smart_gem'

Usage

Then, create a new config class that, and define the configuration you need:

class Config
    extend SmartConfig::Config

    # Optional. Will default to `config/config.yml`
    config_path 'config/app_config.yml'

    value :app_name, default: 'My App'

    group :smtp do
        value :hostname
        value :port, format: :integer
        value :username
        value :password
    end

    group :redis do
        group :connection do
            value :hostname
            value :port
            value :username
            value :password
        end

        value :timeout
    end
end

Then, within your application, you can call:

Config.redis.connection.hostname

To access the configuration value, from the following YAML file for example:

redis:
  connection:
    hostname: 'localhost'

For values that are not in the YAML config, the tool will try reading it from environment variables, such as (from the previous configuration):

REDIS_CONNECTION_PASSWORD

Value Options

Values can use options, which can be set after the value name. For example:

value :hostname, default: 'localhost'

All available options are:

name description
default Sets a default value for the field, if no configuration could be found. If this option is not set, getting an unset field will raise an exception.
format Sets the format of the field. If this option is not set, the field will be formatted as string.