Skip to content

spickermann/has_configuration

Folders and files

NameName
Last commit message
Last commit date
Dec 26, 2024
Dec 25, 2023
Aug 19, 2023
Feb 13, 2014
Dec 30, 2014
Aug 18, 2023
Dec 26, 2024
Dec 26, 2024
Aug 19, 2023
Oct 8, 2013
Dec 25, 2023
Aug 19, 2023
Dec 26, 2024

Repository files navigation

Has Configuration

Load configuration settings from a YAML file and adds a class and an instance method configuration to an object.

License MIT Gem Version Build Status Coverage Status Code Climate

Installation

Include the gem into your Gemfile:

gem 'has_configuration'

When you are still on Ruby 1.8 or on Ruby on Rails 2.3:

gem 'has_configuration', '~> 0.2.4'

When you are still on Ruby 2.4 – 2.7:

gem 'has_configuration', '~> 5.0.1'

Usage

has_configuration
# => loads setting without environment processing from the file #{self.class.name.downcase}.yml

has_configuration file: Rails.root.join('config', 'example.yml'), env: 'staging'
# => loads settings for staging environment from RAILS_ROOT/config/example.yml file

options

file
The YAML file to load: Defaults to config/classname.yml if Rails is defined, classname.yml otherwise.
env
The environment to load from the file. Defaults to `Rails.env` if Rails is defined, no default if not.

YAML File Example

The YAML file may contain defaults. Nesting is not limited. ERB in the YAML file is evaluated.

defaults: &defaults
  user: root
  some:
    nested: value
development:
  <<: *defaults
  password: secret
production:
  <<: *defaults
  password: <%= ENV[:secret] %>

Configuration Retrieval

If the example above was loaded into a class Foo in production environment:

Foo.configuration                         # => <HasConfiguration::Configuration:0x00...>
Foo.new.configuration                     # => <HasConfiguration::Configuration:0x00...>

# convenient getter methods
Foo.configuration.some.nested             # => "value"

# to_h returns a HashWithIndifferentAccess
Foo.configuration.to_h                    # => { :user => "root", :password => "prod-secret"
                                          #      :some => { :nested => "value" } }
Foo.configuration.to_h[:some][:nested]    # => "value"
Foo.configuration.to_h[:some]['nested']   # => "value"

# force a special key type (when merging with other hashes)
Foo.configuration.to_h(:symbolized)       # => { :user => "root", :password => "prod-secret"
                                          #      :some => { :nested => "value" } }
Foo.configuration.to_h(:stringify)        # => { 'user' => "root", 'password' => "prod-secret"
                                          #      'some' => { 'nested' => "value" } }

Contributing

  1. Fork it
  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.