Module: Dry::CLI::Parser

Defined in:
lib/space_core/cli/repeatable_options.rb

Class Method Summary collapse

Class Method Details

.call(command, arguments, prog_name) ⇒ Object



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

def self.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