Skip to content

Latest commit

 

History

History
89 lines (65 loc) · 1.9 KB

README.md

File metadata and controls

89 lines (65 loc) · 1.9 KB

GemConfig

Gem Version Build Status

A nifty way to make your gem configurable.

Usage

As a gem author

Include the gem and add configuration options like this:

# awesomeness.gemspec
Gem::Specification.new do |gem|
  ...
  gem.add_runtime_dependency 'gem_config'
end
# lib/awesomeness.rb
require 'gem_config'

module Awesomeness
  include GemConfig::Base

  with_configuration do
    has :api_key, classes: String
    has :format, values: [:json, :xml], default: :json
    has :region, values: ['us-west', 'us-east', 'eu'], default: 'us-west'
  end
end

Access the configuration values in the gem's code like this:

Awesomeness.configuration.api_key # Whatever the user set

To execute something after the gem is configured:

module Awesomeness
  include GemConfig::Base
  
  # ...
  
  after_configuration_change do
    # configure some other gem you're using, perhaps
  end
end

As a gem user

Include and configure a gem like this:

# Gemfile
gem 'awesomeness'
# config/initializers/awesomeness.rb
Awesomeness.configure do |config|
  config.api_key = 'foobarbaz'
  config.format  = :xml
  config.region  = 'eu'
end
# or
Awesomeness.configuration.api_key = 'foobarbaz'

Of course configuration values are checked against the allowed classes and values, and the default is used if no value is provided.

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

Support

If you like this project, consider buying me a coffee! :)