class TTY::Option::Parser

Constants

ARGUMENT_SEPARATOR
PARAMETER_PARSERS

Attributes

config[R]
parameters[R]

Public Class Methods

new(parameters, **config) click to toggle source
# File lib/tty/option/parser.rb, line 26
def initialize(parameters, **config)
  @parameters = parameters
  @config = config
end

Public Instance Methods

parse(argv, env) click to toggle source
# File lib/tty/option/parser.rb, line 31
def parse(argv, env)
  argv = argv.dup
  params = {}
  errors = []
  ignored = []

  # split argv into processable args and leftovers
  stop_index = argv.index { |arg| arg.match(ARGUMENT_SEPARATOR) }

  if stop_index
    ignored = argv.slice!(stop_index..-1)
    ignored.shift
  end

  PARAMETER_PARSERS.each do |name, parser_type|
    parser = parser_type.new(parameters.send(name), **config)
    if name == :environments
      parsed, argv, err = parser.parse(argv, env)
    else
      parsed, argv, err = parser.parse(argv)
    end
    params.merge!(parsed)
    errors.concat(err)
  end

  argv += ignored unless ignored.empty?

  [params, argv, errors]
end