Elasticonf [![Build Status](https://travis-ci.org/rezwyi/elasticonf.svg?branch=master)](https://travis-ci.org/rezwyi/elasticonf) [![Dependency Status](https://gemnasium.com/rezwyi/elasticonf.svg)](https://gemnasium.com/rezwyi/elasticonf) [![Coverage Status](https://img.shields.io/coveralls/rezwyi/elasticonf.svg)](https://coveralls.io/r/rezwyi/elasticonf)
==========
Powerfull and flexible application config solution worked in any ruby program. No clases definition, no dependencies. It just works!
## Prerequisites
You need to have Ruby 2.0 or higher installed on your system.
## Installation
First add the following lines to your application `Gemfile`:
```ruby
gem 'elasticonf', '~> 1.1.4'
```
Then run `bundle install` to update your's gems bundle.
## Setup and usage
For basic setup you must pass a block to `Elasticonf.configure` method and call `Elasticonf.load!`.
To load settings from the file `some/path/settings.yml` and define `Settings` constant, you need to run the following code:
```ruby
require 'elasticonf'
Elasticonf.configure do |config|
config.config_root = 'some/path'
end
Elasticonf.load!
puts Settings.some_key # will print some value
```
To load settings from the file `some/path/config.yml` and define `Config` constant, you need:
```ruby
require 'elasticonf'
Elasticonf.configure do |config|
config.config_root = 'some/path'
config.config_file = 'config'
config.constant_name = 'Config'
end
Elasticonf.load!
puts Config.some_key # will print some value
```
There is also support for multi environment. To do this change the value of the `config.env` (the default is `'development'`).
Elasticonf supports the following priorities of files (the priority decreases from top to bottom). For the default configuration:
0. `#{Elasticonf.config_root}/settings.local.yml`
0. `#{Elasticonf.config_root}/settings/development.yml`
0. `#{Elasticonf.config_root}/settings.yml`
Sometimes there can be a situation when the constant defined Elasticonf already exists. In this case, exception will raise and method execution will stop. To change this behavior you need to set `config.raise_if_already_initialized_constant` to `false`. Take a look:
```ruby
require 'elasticonf'
Settings = "I'm predefined constant!"
Elasticonf.configure do |config|
config.config_root = 'some/path'
end
Elasticonf.load! # will raise RuntimeError "Cannot set constant Settings because it is already initialized"
```
However, this code is okay:
```ruby
require 'elasticonf'
Settings = "I'm predefined constant!"
Elasticonf.configure do |config|
config.config_root = 'some/path'
config.raise_if_already_initialized_constant = false
end
Elasticonf.load! # will not raise any error
puts Settings.some_key # will print some value
```
## Documentation
Run this commands in terminal:
0. `cd path/to/elasticonf/repo`
0. `bin/yard server`
0. Go to [http://localhost:8808](http://localhost:8808) (by default) in your favorite browser
## Testing
Run this commands in terminal:
0. `cd some/path`
0. `git clone git@github.com:rezwyi/elasticonf.git`
0. `cd elasticonf/`
0. `bundle install`
0. `bin/rake`
## Versioning
Elasticonf uses RubyGems Rational Versioning Policy.
## Copyright
See LICENSE file.