Skip to content

Latest commit

 

History

History
107 lines (73 loc) · 2.45 KB

README.md

File metadata and controls

107 lines (73 loc) · 2.45 KB

ConfigHound

Gem Version Build Status

ConfigHound makes it easy to load configuration data.

Usage

ConfigHound.load supports config in JSON, YAML or TOML formats, and returns raw Ruby data.

config = ConfigHound.load("config.yml")   # or "config.{json,toml}"

Remote config

As well as local files, you can load from any URI supported by OpenURI, e.g.

# load over HTTP
ConfigHound.load("http://config-source/app-config.yml")

# load from S3
require "open-uri-s3"
config = ConfigHound.load("s3://config-bucket/app-config.json")

Multiple sources of config

If you specify a list of config sources, ConfigHound will load them all, and deep-merge the data. Files specified earlier in the list take precedence.

ConfigHound.load(["config.yml", "defaults.yml"])

You can include raw data (Hashes) in the list, too, which is handy if you have defaults or overrides already in Ruby format.

overrides = { ... }
ConfigHound.load([overrides, "config.yml"])

Inclusion

You can also "include" other file (or URIs) from within a config file. Just list the paths under the key _include.

For example, in config.yml:

pool:
  size: 10
log:
  file: "app.log"
_include:
  - defaults.yml

then in defaults.yml

log:
level: INFO
pool:
size: 1

Values in the original config file take precedence over those from included files. Multiple levels of inclusion are possible.

If the placeholder "_include" doesn't suit, you can specify another, e.g.

config = ConfigHound.load("config.yml", :include_key => "defaults")

Reference expansion

ConfigHound can expand references of the form <(X.Y.Z)> in config values, which can help DRY up configuration, e.g.

name: myapp
aws:
  region: us-west-1
log:
  stream: <(name)>-logs-<(aws.region)>

Enable reference expansion with the :expand_refs option.

ConfigHound.load(config_files, :expand_refs => true)

Reference expansion is performed after all config is loaded and merged, so you can reference config specified in other files.

Contributing

It's on GitHub; you know the drill.

See also

ConfigHound works well with: