Configue

Configue is a configuration / settings solution that uses YAML files. It is almost a fork of SettingsLogic. Configue can read multiple YAML files and you can use big configuration data simply.

Installation

gem install configue

Basic Usage

Define your class

class MyConf < Configue::Container
  config.source_dir "#{File.dirname(__FILE__)}/config"
end

Write your settings in YAML file

# config/accounts/admin_users.yml
accounts:
  admin_users:
    - grumpy
    - sneezy

You can make multiple settings files.

# config/accounts/test_users.yml
accounts:
  test_users:
    - sleepy
    - dopey

Access your settings

>> MyConf.accounts.admin_users
=> ["grumpy", "sneezy"]

>> MyConf.accounts.test_users
=> ["sleepy", "dopey"]

Other usage

namespace

You can specify namespace and base_namespace.

When you write settings as follows:

# config/settings/base.yml
base:
  foo:
    baa:
      - a
      - b
      - c
    baz:
      - one
      - two
      - three

# config/settings/dev.yml
dev:
  foo:
    baa:
      - pee
      - kaa
      - boo

# config/settings/test.yml
test:
  foo:
    baa:
      - boo
      - foo
      - woo

and define a class for the settings

class MyConf < Configue::Container
  config.source_dir "#{File.dirname(__FILE__)}/config/settings"
  config.base_namespace :base
  config.namespace :test
end

you can access it in the following manner:

>> MyConf.foo.baa
=> ["boo", "foo", "woo"]

>> MyConf.foo.baz
=> ["one", "two", "three"]

source_file

You can specify files that you want to load into your class in the following manner:

class MyConf < Configue::Container
  config.source_file "#{File.dirname(__FILE__)}/config/settings/base.yml"
  config.source_file "#{File.dirname(__FILE__)}/config/settings/dev.yml"
  config.source_file "#{File.dirname(__FILE__)}/config/settings/test.yml"

  ...

support ERB tag

You can use ERB tags in YAML files.

foo:
  baa:
    baz:
      - <%= ENV['foo'] %>

import_config

You can import a configuration into an object as one of its attributes without defining a class for that.

class Foo
  include Configue::Importer
  import_config from_dir: "#{File.dirname(__FILE__)}/config/settings",
                as: :settings,
                namespace: :dev
  ...
  def foo
    if settings.foo.baa == ...
    ...