Load configuration settings from a YAML file and adds a class and an instance method configuration
to an object.
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'
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.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new pull request.
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] %>
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" } }