Files
news.gitea.happylizard.me/bin/gems/facets-3.1.0/lib/standard/facets/cli.rb
T
pizza2d1 4cee170d66
Gitea Actions Demo / Explore-Gitea-Actions (push) Failing after 9s
Add bin and edit workflow
2026-09-16 13:11:16 -06:00

55 lines
1.1 KiB
Ruby

module Kernel
private
#
# CLI is based on Clap library
# Copyright (c) 2010 Michel Martens
#
def cli(*args)
opts = args.pop
argv = (args.first || ARGV).dup
args = []
# Split option aliases.
opts = opts.inject({}) do |h,(k,v)|
k.to_s.split(/\s+/).each{|o| h[o]=v}; h
end
# Convert single dash flags into multiple flags.
argv = argv.inject([]) do |a, v|
if v[0,1] == '-' && v[1,1] != '-'
a.concat(v[1..-1].chars.map{|c| "-#{c}"})
else
a << v
end
a
end
while argv.any?
item = argv.shift
flag = opts[item]
if flag
# Work around lambda semantics in 1.8.7.
arity = [flag.arity, 0].max
# Raise if there are not enough parameters
# available for the flag.
if argv.size < arity
raise ArgumentError
end
# Call the lambda with N items from argv,
# where N is the lambda's arity.
flag.call(*argv.shift(arity))
else
# Collect the items that don't correspond to
# flags.
args << item
end
end
args
end
end