Skip to content

Options DSL - small ruby dsl for defining command line options

Notifications You must be signed in to change notification settings

gambol99/options-dsl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

35 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Options DSL

Notes: Still needs some work :-)

OptionsDSL is a library for defining command line options (albeit it could be used for other argument processing). The options, including global flags / switches and validation code can also be used to for subcommand; i.e. ./scipt.rb [options]

The DSL can been loaded from a single file or multiple files from a directory; The OptionsDSL class requires the following

config = {
    :directory  => '/my/directory/of/rules',       # the full path to the directory,
    :extensions => '*.ddl'                         # the regex to determine which file/s to read
    :log_level  => [nil,:info|:warn|:debug]        # the logging level to employ
}
# the second argument can be used to pass some default options
dsl = OptionsDSL::new config, options | nil

Below is an example of the DSL language. Note, :global is a special command and effectly to used to describe all non subcommand options.

command :global, 'global and misc options' do 
    input :vagrant,
        :description    => 'the location of the vagrant executable',
        :defaults       => 'vagrant',
        :validation     => :executable,
        :options        => :vagrant,
        :optional       => false

    input :vbox_manage,
        :description    => 'the location of the virtualbox manager tool',
        :defaults       => 'VBoxManage',
        :validation     => :executable,
        :options        => :vbox_manage,
        :optional       => false

    input :classification,
        :description    => 'the location of the puppet classification file',
        :defaults       => 'puppet/classification.yaml',
        :validation     => :filename,
        :options        => :classification,
        :optional       => false
end

So to produce the following

./script subcommand1 -H hostname -d domain

The dsl would resemble

command :subcommand1, 'global and misc options' do 
    input :hostname,
        :description    => 'some description',
        :validation     => :string,
        :options        => :hostname,
        :optional       => false

    input :domain,
        :description    => 'the domain',
        :validation     => :domain,
        :options        => :domain,
        :optional       => false
end

options :hostname,
    :short  => '-H hostname',
    :long   => '--hostname hostname'

options :domain,
    :short  => '-d domain',
    :long   => '--domain domain'

validation :hostname,
    :format     => :string,
    :regex      => /^[[:alpha:]\-]{,10}[0-9]{3}-[[:alnum:]]{2,5}$/ 

validation :domain
    :format     => :string,
    :regex      => /.*/

About

Options DSL - small ruby dsl for defining command line options

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Languages