class P4Tools::CommandParser

Public Class Methods

new(args) click to toggle source

@param [Array<String>] args

# File lib/p4tools/parsers/command_parser.rb, line 5
def initialize(args)
  @raw_args = args
  @parsed_args = []
end

Public Instance Methods

parse() click to toggle source

@return [Array<CommandEntry>]

# File lib/p4tools/parsers/command_parser.rb, line 11
def parse
  parse_global_arguments
  parse_commands

  @parsed_args
end

Private Instance Methods

load_module_for_command(command) click to toggle source

@param [String] command @return [Module]

# File lib/p4tools/parsers/command_parser.rb, line 56
def load_module_for_command(command)
  require command
  P4Tools.const_get(Utils.classify(command))
end
parse_arguments(command_module) click to toggle source

@param [Module] command_module @return [Hash<Symbol, Object>]

# File lib/p4tools/parsers/command_parser.rb, line 41
def parse_arguments(command_module)
  parser = Trollop::Parser.new
  options = CommandOptions.new(parser)

  command_module.set_options(options)
  parser.stop_on SUB_COMMANDS

  Trollop.with_standard_exception_handling(parser) {
    raise Trollop::HelpNeeded if ARGV.empty? && options.show_help
    parser.parse @raw_args
  }
end
parse_commands() click to toggle source

@return [void]

# File lib/p4tools/parsers/command_parser.rb, line 27
def parse_commands
  while command = @raw_args.shift
    unless SUB_COMMANDS.include?(command)
      raise(ArgumentError, "The following subcommand does not exist: '#{command}'")
    end

    command_module = load_module_for_command(command)
    entry = CommandEntry.new(command_module, parse_arguments(command_module))
    @parsed_args.push(entry)
  end
end
parse_global_arguments() click to toggle source

@return [void]

# File lib/p4tools/parsers/command_parser.rb, line 21
def parse_global_arguments
  entry = CommandEntry.new(P4Tools, parse_arguments(P4Tools))
  @parsed_args.push(entry)
end