Skip to content
Hash based application configuration
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.
lib
test
.gitignore
CHANGELOG.md
CONTRIBUTING.md
Gemfile
LICENSE
README.md
Rakefile
bogo-config.gemspec

README.md

Bogo Config

Hash based application configuration helpers, because snowflake configurations are evil.

Usage

Direct

Use the Bogo::Config directly to store configuration values:

require 'bogo-config'

config = Bogo::Config.new(
  :bind => {
    :address => '0.0.0.0',
    :port => 8080
  },
  :run_as => 'www-data'
)

puts config.get(:bind, :address)
puts config[:run_as]

Configuration files

A path to a configuration file can also be provided. Lets define the file:

# /tmp/bogo-config.json
{
  "bind": {
    "address": "0.0.0.0",
    "port": 8080
  },
  "run_as": "www-data"
}

and now we can load it:

require 'bogo-config'

config = Bogo::Config.new('/tmp/bogo-config.json')

puts config.get(:bind, :address)
puts config[:run_as]

Subclassing

Subclassing Bogo::Config allows adding some structure to the configuration file. The Bogo::Lazy module is used to provide the #attribute method to describe the configuration:

require 'bogo-config'

class MyConfig < Bogo::Config
  attribute :bind, Smash, :coerce => proc{|v| v.to_smash}
  attribute :run_as, String, :default => 'www-data'
end

config = MyConfig.new('/tmp/bogo-config.json')
puts config.get(:bind, :address)
puts config[:run_as]

Configuration file

Support for AttributeStruct configuration files is builtin. A helper class is provided as a visual nicety. The above JSON example could also be written as:

# /tmp/bogo-config.rb
Configuration.new do
  bind do
    address '0.0.0.0'
    port 8080
  end
  run_as 'www-data'
end

Configuration file support

Currently the following serialization types are supported:

  • JSON
  • YAML
  • XML
  • AttributeStruct

Note on XML configuration files: The configuration must be contained within a <configuration> tag. The above example would then look like this:

<configuration>
  <bind>
    <address>
      0.0.0.0
    </address>
    <port>
      8080
    </port>
  </bind>
  <run_as>
    www-data
  </run_as>
</configuration>

Configuration directory

The path provided on initialization can also be a directory. The contents of the directory will be read in string sorted order and deep merged. Files can be a mix of supported types.

Ruby evaluation

Ruby evaluation is super awesome, except when you don't want it and then it's not super awesome. If a running process needs to disable Ruby based evaluation (a service perhaps), this can be done with an environment variable:

export BOGO_CONFIG_DISABLE_EVAL=true

Info

You can’t perform that action at this time.