class Baf::OptionsRegistrant

Constants

HELP_PARSER_ARGS
SUMMARY_HEADER

Attributes

banner[RW]
options[R]

Public Class Methods

new(options = []) click to toggle source
# File lib/baf/options_registrant.rb, line 15
def initialize options = []
  @options = options
end

Public Instance Methods

flag(*args, **opts) click to toggle source
# File lib/baf/options_registrant.rb, line 19
def flag *args, **opts
  options << Flag.new(*args, **opts)
end
option(*args) click to toggle source
# File lib/baf/options_registrant.rb, line 23
def option *args
  options << Option.new(*args)
end
register(env, parser) { || ... } click to toggle source
# File lib/baf/options_registrant.rb, line 27
def register env, parser
  yield if block_given?
  parser.banner = banner if banner
  parser.separator SUMMARY_HEADER
  options_tail, options_standard = options.partition &:tail?
  options_standard.each { |opt| register_option env, parser, opt }
  register_default_options env, parser
  options_tail.each { |opt| register_option env, parser, opt }
end

Private Instance Methods

define_env_accessor(env, name) click to toggle source
# File lib/baf/options_registrant.rb, line 41
def define_env_accessor env, name
  (class << env; self end).send :attr_accessor, name
end
define_env_predicate(env, name) click to toggle source
# File lib/baf/options_registrant.rb, line 45
def define_env_predicate env, name
  define_env_accessor env, name
  env.send :"#{name}=", false
  env.define_singleton_method :"#{name}?" do
    instance_variable_get :"@#{name}"
  end
  env.instance_variable_set :"@#{name}", false
end
register_default_options(env, parser) click to toggle source
# File lib/baf/options_registrant.rb, line 54
def register_default_options env, parser
  parser.separator '' if options.any?
  parser.on_tail *HELP_PARSER_ARGS do
    env.print parser
    exit
  end
end
register_option(env, parser, opt) click to toggle source
# File lib/baf/options_registrant.rb, line 62
def register_option env, parser, opt
  send :"define_env_#{opt.env_definition}", env, opt.long unless opt.block?
  *args, block = opt.to_parser_arguments env
  parser.send *args, &block
end