class Af::OptionParser::Helper
Public Class Methods
new(af_opt_class_path)
click to toggle source
# File lib/fiksu-af/option_parser/helper.rb, line 3 def initialize(af_opt_class_path) option_finder = OptionFinder.new(af_opt_class_path) @options = option_finder.all_options @grouped_options = @options.group_by{|option| option.option_group_name || :basic} @groups = option_finder.all_option_groups.sort{|a,b| (a.priority || 50) <=> (b.priority || 50)} end
Public Instance Methods
help(command_line_usage, show_hidden = false)
click to toggle source
Prints to stdout application usage and all command line options.
# File lib/fiksu-af/option_parser/helper.rb, line 11 def help(command_line_usage, show_hidden = false) # Print usage. puts(command_line_usage) # Array of strings to be printed to stdout. output = [] # Iterate through all command groups sorted by priority. @groups.each do |group| options_in_group = @grouped_options[group.group_name] unless options_in_group.blank? if group.hidden == true && show_hidden == false # skipping hidden groups else output << "#{group.group_name}: #{group.title}" unless group.description.blank? output << " " + group.description.split("\n").map(&:strip).join("\n ") end rows = [] # Iterate trhough all commands in this group. options_in_group.sort{|a,b| a.long_name <=> b.long_name}.each do |option| if option.hidden == true && show_hidden == false # skipping hidden commands else columns = [] switches = "#{option.long_name}" if (option.short_name) switches << " | #{option.short_name}" end unless (option.requirements == ::Af::OptionParser::GetOptions::NO_ARGUMENT) if (option.argument_note) switches << " #{option.argument_note}" elsif (option.option_type) note = OptionType.find_by_short_name(option.option_type).try(:argument_note) switches << " #{note}" if note end end columns << switches notes = [] unless (option.requirements == ::Af::OptionParser::GetOptions::NO_ARGUMENT) if option.default_value.present? if option.default_value.is_a? Array notes << "(default: #{option.default_value.join(',')})" elsif option.default_value.is_a? Hash notes << "(default: #{option.default_value.map{|k,v| k.to_s + '=>' + v.to_s}.join(',')}" else notes << "(default: #{option.default_value})" end end end notes << (option.note || "") notes << "(choices: #{option.choices.map(&:to_s).join(', ')})" unless option.choices.blank? if option.environment_variable notes << " [env: #{option.environment_variable}]" end columns << notes.join(' ') rows << columns end end output += Columnizer.new.columnized(rows) end end end puts output.join("\n") end