A clever, heirarchical config loader for Perl6
Perl6
Switch branches/tags
Nothing to show
Latest commit a869961 Oct 27, 2016 @ShaneKilkelly committed on GitHub Merge pull request #2 from zoffixznet/patch-1
Add mandatory "perl" META field

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