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