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 = (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
|