Module: Ace::Support::Cli::ArgvCoalescer

Defined in:
lib/ace/support/cli/argv_coalescer.rb

Class Method Summary collapse

Class Method Details

.call(argv, flags:, separator: ",") ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/ace/support/cli/argv_coalescer.rb', line 7

def self.call(argv, flags:, separator: ",")
  normalized = normalize_flags(flags)
  accum = normalized.values.to_h { |canonical| [canonical, []] }
  passthrough = []

  i = 0
  while i < argv.length
    token = argv[i]
    flag = token.include?("=") ? token.split("=", 2)[0] : token
    canonical = normalized[flag]

    if canonical
      value = extract_value(token, argv, i)
      accum[canonical] << value unless value.to_s.empty?
      i = next_index(token, argv, i)
    else
      passthrough << token
      i += 1
    end
  end

  result = passthrough.dup
  accum.each do |canonical, values|
    next if values.empty?

    result << canonical
    result << values.join(separator)
  end
  result
end