lib/ggem/cli/clirb.rb in ggem-1.9.1 vs lib/ggem/cli/clirb.rb in ggem-1.9.2

- old
+ new

@@ -1,59 +1,55 @@ module GGem; end -class GGem::CLI +class GGem::CLI; end +class GGem::CLI::CLIRB # Version 1.1.0, https://github.com/redding/cli.rb + Error = Class.new(RuntimeError); + HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError) + attr_reader :argv, :args, :opts, :data - class CLIRB # Version 1.0.0, https://github.com/redding/cli.rb - Error = Class.new(RuntimeError); - HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError) - attr_reader :argv, :args, :opts, :data - - def initialize(&block) - @options = []; instance_eval(&block) if block - require "optparse" - @data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p| - p.banner = ""; @options.each do |o| - @opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v } - end - p.on_tail("--version", ""){ |v| raise VersionExit, v.to_s } - p.on_tail("--help", ""){ |v| raise HelpExit, v.to_s } + def initialize(&block) + @options = []; instance_eval(&block) if block + require "optparse" + @data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p| + p.banner = ""; @options.each do |o| + @opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v } end + p.on_tail("--version", ""){ |v| raise VersionExit, v.to_s } + p.on_tail("--help", ""){ |v| raise HelpExit, v.to_s } end + end - def option(*args); @options << Option.new(*args); end - def parse!(argv) - @args = (argv || []).dup.tap do |args_list| - begin; @parser.parse!(args_list) - rescue OptionParser::ParseError => err; raise Error, err.message; end - end; @data = @args + [@opts] - end - def to_s; @parser.to_s; end - def inspect - "#<#{self.class}:#{"0x0%x" % (object_id << 1)} @data=#{@data.inspect}>" - end + def option(*args); @options << Option.new(*args); end + def parse!(argv) + @args = (argv || []).dup.tap do |args_list| + begin; @parser.parse!(args_list) + rescue OptionParser::ParseError => err; raise Error, err.message; end + end; @data = @args + [@opts] + end + def to_s; @parser.to_s; end + def inspect + "#<#{self.class}:#{"0x0%x" % (object_id << 1)} @data=#{@data.inspect}>" + end - class Option - attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args + class Option + attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args - def initialize(name, *args) - settings, @desc = args.last.kind_of?(::Hash) ? args.pop : {}, args.pop || "" - @name, @opt_name, @abbrev = parse_name_values(name, settings[:abbrev]) - @value, @klass = gvalinfo(settings[:value]) - @parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass) - ["-#{@abbrev}", "--[no-]#{@opt_name}", @desc] - else - ["-#{@abbrev}", "--#{@opt_name} #{@opt_name.upcase}", @klass, @desc] - end + def initialize(name, desc = nil, abbrev: nil, value: nil) + @name, @desc = name, desc || "" + @opt_name, @abbrev = parse_name_values(name, abbrev) + @value, @klass = gvalinfo(value) + @parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass) + ["-#{@abbrev}", "--[no-]#{@opt_name}", @desc] + else + ["-#{@abbrev}", "--#{@opt_name} VALUE", @klass, @desc] end + end - private + private - def parse_name_values(name, custom_abbrev) - [ (processed_name = name.to_s.strip.downcase), processed_name.gsub("_", "-"), - custom_abbrev || processed_name.gsub(/[^a-z]/, "").chars.first || "a" - ] - end - def gvalinfo(v); v.kind_of?(Class) ? [nil,gklass(v)] : [v,gklass(v.class)]; end - def gklass(k); k == Fixnum ? Integer : k; end + def parse_name_values(name, custom_abbrev) + [ (processed_name = name.to_s.strip.downcase).gsub("_", "-"), + custom_abbrev || processed_name.gsub(/[^a-z]/, "").chars.first || "a" + ] end + def gvalinfo(v); v.kind_of?(Class) ? [nil,v] : [v,v.class]; end end - end