Project

foundry

0.0
No commit activity in last 3 years
No release in over 3 years
Let's face it, there are a number of problems when application/environment configuration logic is too tightly coupled with the configuration-data itself. This gem aims to keep it simple and fully decouple the two concerns.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 0.11
~> 12.3
~> 3.7
~> 3.3
 Project Readme

Foundry

Build Status Dependency Status

An application configuration gem that aims to keep it simple

Let's face it, there are a number of problems when application/environment configuration logic is too tightly coupled with the configuration-data itself. This gem aims to keep it simple and fully decouple the two concerns.

Features:

  • Can load JSON, XML or YAML from a local-file
  • Can load JSON, XML or YAML from a HTTP/HTTPS endpoint
  • Supports Basic Authentication for HTTP{,S} endpoints
  • Supports ERB interpolation
  • Returns an easy to navigate object-graph

Installation

Add this line to your application's Gemfile:

gem 'foundry'

And then execute:

$ bundle

Or install it yourself as:

$ gem install foundry

Usage

Loading from a local-file:

config = Foundry::Configurator.configure(
  :root_path => 'local-root-path',
  :relative_path => 'relative-path-to-file',
  :source_type => Foundry::Sources::File
)

Loading from a HTTP/HTTPS endpoint:

# defaults to a source-type of `Foundry::Sources::URI` and a parser-type of `Foundry::Parsers::YAML`
config = Foundry::Configurator.configure(
  :root_path => 'http-or-https-root-url',
  :relative_path => 'relative-path-to-file',
)

Loading YAML from a HTTP/HTTPS endpoint using "Basic Authentication":

config = Foundry::Configurator.configure(
  :root_path => 'http-or-https-root-url',
  :relative_path => 'relative-path-to-file',
  :username => 'basic-auth-username',
  :password => 'basic-auth-password'
)

Fetching top-level and nested values:

# The examples below assume that a file containing the following has already
# been loaded and processed by a call to `Foundry::Configurator.configure` (into
# a variable named `config`).
#
# ---
# value1: value
# value2:
#   nested_value1: value

# Fetching a top-level value using dot-notation
value1 = config.value1

# Fetching a nested value using dot-notation
nested_value1 = config.value2.nested_value1

# Fetching a top-level value by key
value1 = config['value1']

# Fetching a nested value by key
nested_value1 = config['value2']['nested_value1']

Inheritance support:

# The examples below assume that there are two files available, relative to the
# `root_path`, named "file1.yml" and "file2.yml" (and that "file2.yml" inherits
# from "file1.yml" -- it is immaterial at this point whether the file-format is
# JSON, XML or YAML).
#
# When using the JSON parser, the file contents would be as follows:
#
# === file1.json ===
#
# { "value1": "value" }
#
# === file2.json ===
#
# { "inherit": "file1.json", "value2": "value" }
#
# When using the XML parser, the file contents would be as follows:
#
# === file1.xml ===
#
# <config><value1>value</value1></config>
#
# === file2.json ===
#
# <config inherit="file1.xml"><value2>value</value2></config>
#
# === file2.json.alt (functionally equivalent to the file above) ===
#
# <config><value2>value</value2><inherit>file1.xml</inherit></config>
#
# When using the YAML parser, the file contents would be as follows:
#
# === file1.yml ===
#
# ---
# value1: value
#
# === file2.yml ===
#
# ---
# value2: value
# inherit: file1.yml
#
#
# It is also assumed that the files have already been loaded and processed by a
# call to `Foundry::Configurator.configure` (into a variable named `config`).
#
# Regardless of parser-type the result now contains values for both `value1` and
# `value2` and can be used as follows (it is worth noting that the `inherit` key
# is removed during the configuration process):

# Fetching `value1` and `value2` using dot-notation
value1 = config.value1
value2 = config.value2

# Fetching `value1` and `value2` by key
value1 = config['value1']
value2 = config['value2']

Contributing

  1. Fork it ( http://github.com/jzaleski/foundry/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request