0.0
No commit activity in last 3 years
No release in over 3 years
Configurable adds methods to declare class configurations. Configurations are inheritable, delegate to methods, and have hash-like access. Configurable constructs configs such that they easily map to config files, web forms, and the command line.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.0

Runtime

~> 1.0
 Project Readme

Configurable¶ ↑

Class configurations for the command line and web.

Description¶ ↑

Configurable adds methods to declare class configurations. Configurations are inheritable, delegate to methods, and have hash-like access. Configurable constructs configs such that they easily map to config files, web forms, and the command line.

Usage¶ ↑

Declare configurations using the config method. Config generates accessors that initialize with the default value.

class ConfigClass
  include Configurable
  config :flag, false    # a flag
  config :switch, true   # an on/off switch
  config :num, 3.14      # a number
  config :lst, [1,2,3]   # a list of integers
  config :str, 'one'     # a string
end

c = ConfigClass.new
c.str                    # => 'one'

Configs may also be accessed through config (a kind of delegating hash):

c.str = 'two'
c.config[:str]           # => 'two'
c.config[:str] = 'three'
c.str                    # => 'three'

c.config.to_hash
# => {
# :flag => false,
# :switch => true,
# :num => 3.14,
# :lst => [1, 2, 3],
# :str => 'three'
# }

Configs may be imported and exported as simple objects which easily translate to and from user interfaces, be they config files, web forms, or the command line.

Config files:

c.config.import(
  'flag'   => true,
  'num'    => 6.022
)

c.config.export
# => {
# 'flag'   => true,
# 'switch' => true,
# 'num'    => 6.022,
# 'lst'    => [1, 2, 3],
# 'str'    => 'three'
# }

Web forms:

params = {
  'flag'   => 'true',      # checkbox
  'switch' => 'true',      # radio button
  'num'    => '2.71',      # text input
  'lst'    => ['2', '6']   # list input (lst[]=2&lst[]=6)
}

c.config.import(params).to_hash
# => {
# :flag    => true,
# :switch  => true,
# :num     => 2.71,
# :lst     => [2, 6],
# :str     => 'three'
# }

Command Line:

c.config.parse %w{a --flag --no-switch --num 6.022 --lst 7 --lst 8,9 b c}
# => ['a', 'b', 'c']

c.config.to_hash
# => {
# :flag   => true,
# :switch => false,
# :num    => 6.022,
# :lst    => [7, 8, 9],
# :str    => 'three'
# }

stdout = []
parser = c.config.parser do |psr|
  psr.on '-h', '--help', 'print help' do
    stdout << "options:"
    stdout << psr
  end
end

parser.parse('--help')
"\n" + stdout.join("\n")
# => %q{
# options:
#         --flag                       a flag
#     -h, --help                       print help
#         --lst LST...                 a list of integers (1,2,3)
#         --num NUM                    a number (3.14)
#         --str STR                    a string (one)
#         --[no-]switch                an on/off switch
# }

Configurable supports custom data types, nested configs, and config modules.

See the help documentation for more details:

Installation¶ ↑

Configurable is available as a gem.

% gem install configurable

Development¶ ↑

To get started, checkout the code from GitHub and run the tests:

git clone git://github.com/thinkerbot/configurable.git
cd configurable
rake test

Please report any issues here.

Info ¶ ↑

Developer

Simon Chiang

License

MIT-Style