A nifty way to make your gem configurable.
Ruby

README.md

GemConfig

Gem Version Build Status Dependency Status Code Climate

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

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