class Cl::Args
Attributes
args[W]
Public Instance Methods
apply(cmd, values, opts)
click to toggle source
# File lib/cl/args.rb, line 16 def apply(cmd, values, opts) values = splat(values) if splat? values = default(values) if default? validate(values) return values if args.empty? values = args.zip(values).map { |(arg, value)| arg.set(cmd, value) }.flatten(1) #.compact compact_args(values) end
args()
click to toggle source
# File lib/cl/args.rb, line 35 def args @args ||= [] end
clear()
click to toggle source
# File lib/cl/args.rb, line 39 def clear args.clear end
define(const, name, *args)
click to toggle source
# File lib/cl/args.rb, line 7 def define(const, name, *args) opts = args.last.is_a?(Hash) ? args.pop.dup : {} opts[:description] = args.shift if args.any? arg = Arg.new(name, opts) arg.define(const) self.args << arg end
dup()
click to toggle source
Calls superclass method
# File lib/cl/args.rb, line 43 def dup args = super args.args = args.args.dup args end
each(&block)
click to toggle source
# File lib/cl/args.rb, line 25 def each(&block) args.each(&block) end
index(*args, &block)
click to toggle source
# File lib/cl/args.rb, line 29 def index(*args, &block) self.args.index(*args, &block) end
Private Instance Methods
allowed()
click to toggle source
# File lib/cl/args.rb, line 57 def allowed args.size end
compact_args(args)
click to toggle source
# File lib/cl/args.rb, line 87 def compact_args(args) args = compact_args(args[0..-2]) while args.last.nil? && args.size > 0 args end
default(values)
click to toggle source
# File lib/cl/args.rb, line 81 def default(values) args.each.with_index.inject([]) do |args, (arg, ix)| args << (values[ix] || arg.default) end end
default?()
click to toggle source
# File lib/cl/args.rb, line 65 def default? any?(&:default?) end
required()
click to toggle source
# File lib/cl/args.rb, line 69 def required select(&:required?).size end
splat(values)
click to toggle source
# File lib/cl/args.rb, line 73 def splat(values) args.each.with_index.inject([]) do |group, (arg, ix)| count = arg && arg.splat? ? [values.size - args.size + ix + 1] : [] count = 0 if count.first.to_i < 0 group << values.shift(*count) end end
splat?()
click to toggle source
# File lib/cl/args.rb, line 61 def splat? any?(&:splat?) end
validate(args)
click to toggle source
# File lib/cl/args.rb, line 51 def validate(args) # raise ArgumentError.new(:unknown_arg, arg) if unknown?(arg) raise ArgumentError.new(:missing_args, args.size, required) if args.size < required raise ArgumentError.new(:too_many_args, args.join(' '), args.size, allowed) if args.size > allowed && !splat? end