class Hiiro::Options
def self.new(args = nil, &block)
def self.new(args = nil, &block) instance = allocate instance.send(:base_initialize, &block) if args instance.parse!(args) else instance end end
def self.parse(args, &block)
def self.parse(args, &block) new(&block).parse!(args) end
def self.setup(&block)
def self.setup(&block) new(&block) end
def base_initialize(&block)
def base_initialize(&block) itions = {} help, short: 'h', desc: 'Show this help message') ce_eval(&block) if block
def flag(name, short: nil, default: false, desc: nil)
def flag(name, short: nil, default: false, desc: nil) defn = Definition.new(name, short: short, type: :flag, default: default, desc: desc) @definitions[name.to_sym] = defn self end
def help_text
def help_text lines = [] @definitions.each do |name, defn| next if name == :help lines << defn.usage_line end lines << @definitions[:help].usage_line lines.join("\n") end
def initialize(&block)
def initialize(&block) base_initialize(&block) end
def option(name, short: nil, type: :string, default: nil, desc: nil, multi: false)
def option(name, short: nil, type: :string, default: nil, desc: nil, multi: false) defn = Definition.new(name, short: short, type: type, default: default, desc: desc, multi: multi) @definitions[name.to_sym] = defn self end
def parse(args)
def parse(args) Args.new(@definitions, args.flatten.compact) end
def parse!(args)
def parse!(args) parse(args) end