Module: Dry::CLI::Parser::RepeatableOptionsPatch

Included in:
Dry::CLI::Parser
Defined in:
lib/space_core/cli/repeatable_options.rb

Overview

Reopened on Parser's own nesting (not CLI's) so Result resolves lexically, exactly as it does in dry-cli's own Parser.call.

Instance Method Summary collapse

Instance Method Details

#call(command, arguments, prog_name) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/space_core/cli/repeatable_options.rb', line 27

def call(command, arguments, prog_name)
  original_arguments = arguments.dup
  parsed_options = {}

  OptionParser.new do |opts|
    command.options.each do |option|
      opts.on(*option.parser_options) do |value|
        if option.array?
          (parsed_options[option.name.to_sym] ||= []).concat(value)
        else
          parsed_options[option.name.to_sym] = value
        end
      end
    end

    opts.on_tail("-h", "--help") do
      return Result.help
    end
  end.parse!(arguments)

  parsed_options = command.default_params.merge(parsed_options)
  parse_required_params(command, arguments, prog_name, parsed_options)
rescue ::OptionParser::ParseError, ValueError
  Result.failure("ERROR: \"#{prog_name}\" was called with arguments \"#{original_arguments.join(" ")}\"")
end