lib/argy/help.rb in argy-0.0.0 vs lib/argy/help.rb in argy-0.1.0

- old
+ new

@@ -1,20 +1,13 @@ module Argy - # Builds help information class Help - # Create a new Help - # @param parser [Parser] the parser to generate help for - # @param column [Integer] the column width of the help - # @param color [TrueClass,FalseClass] whether or not to print with color def initialize(parser, column: 30, color: $stdout.tty?) @parser = parser @column = column @color = color end - # The help information - # @return [String] def to_s out = [] description(out) usage(out) @@ -24,30 +17,10 @@ flags(out) out.join("\n") + "\n" end - # Format the title of a custom section - # @return [String] - def section(title) - bold "\n#{title}" - end - - # Format an entry of a section - # @param name [String] left column of the entry - # @param desc [String] right column of the entry - # @param required [TrueClass,FalseClass] whether or not the entry is required - # @param default [Object] default value for the entry - # @return [String] - def entry(name, desc: nil, required: false, default: nil) - out = " #{name.ljust(column)}" - out += dim("#{desc} ") if desc - out += dim("(required) ") if required - out += dim("[default: #{default.inspect}]") if default - out.rstrip - end - private def description(out) out << "#{parser.description}\n" if parser.description end @@ -66,37 +39,46 @@ out << bold("\nARGUMENTS") if parser.arguments.any? out.concat parser.arguments.map { |a| argument(a) } end def argument(a) - entry(a.label, desc: a.desc, required: a.required?, default: a.default) + parameter(a.label, a.desc, a.required?, a.default) end def options(out) out << bold("\nOPTIONS") if parser.options.any? out.concat parser.options.map { |o| option(o) } end def option(o) label = [option_label(o.label, o.type)] label += o.aliases.map { |a| option_label(a, o.type) } - entry(label.join(", "), desc: o.desc, required: o.required?, default: o.default) + parameter(label.join(", "), o.desc, o.required?, o.default) end def flags(out) - out << bold("\nFLAGS") if parser.flags.any? + out << bold("\nFLAGS") out.concat parser.flags.map { |f, _| flag(f) } + out << parameter("--help, -h", "show this help and exit") end def flag(flag) flag = flag.dup desc = flag.pop unless flag.last.match?(/^-/) - entry(flag.reverse.join(", "), desc: desc) + parameter(flag.reverse.join(", "), desc) end def option_label(label, type) return label if type == :boolean label.start_with?("--") ? "#{label}=VALUE" : "#{label} VALUE" + end + + def parameter(left, right, required = false, default = nil) + label = " #{left.ljust(column)}" + label += dim("#{right} ") if right + label += dim("(required) ") if required + label += dim("[default: #{default.inspect}]") if default + label.rstrip end def bold(text) color? ? "\e[1m#{text}\e[0m" : text end