A clever, heirarchical config loader for Perl6
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
config
lib/Config
t Fix removed @*INC Dec 5, 2015
.travis.yml
LICENSE.txt Add a license file Oct 18, 2015
META6.json Use SPDX identifier in license field of META6.json Apr 28, 2017
README.md Update README.md Nov 16, 2015

README.md

Config::Clever

A clever, heirarchical config loader for perl6.

Build Status

Config files

Config::Clever.load takes a String environment parameter and loads json files from the config/ directory. The json objects are loaded and merged together in the following order:

  • default.json
  • <environment>.json
  • local-<environment>.json

Calling Config::Clever.load without any parameters will use default as the environment. You can also supply a path to another config directory:

my %config = Config::Clever.load(:environment("staging"), :config-dir("./my/weird/path"));

Example

Imagine we have a directory config, with two files: default.json and development.json.

// default.json
{
    "db": {
        "host": "localhost",
        "port": 27017,
        "user": null,
        "password": null,
        "auth": false
    },
    "logLevel": "DEBUG"
}

// development.json
{
    "db": {
        "user": "apprunner",
        "password": "a_terrible_password",
        "auth": true
    }
}

If we call Config::Clever.load, with "development" as the environment, we'll get a hash which consists of the data from development.json merged on top of the data in default.json.

use v6;
use Config::Clever;

my %config = Config::Clever.load(:environment('development'));
say %config
# %config is a hash equivalent to:
#   {
#       "db": {
#           "host": "localhost",
#           "port": 27017,
#           "user": "apprunner",
#           "password": "a_terrible_password",
#           "auth": true
#       },
#       "logLevel": "DEBUG"
#   }

Todo

  • more tests
  • support more file formats such as ini, yaml and toml