class Docopt::Pattern

Attributes

children[RW]

Public Instance Methods

==(other) click to toggle source
# File lib/docopt.rb, line 29
def ==(other)
  return self.inspect == other.inspect
end
dump() click to toggle source
# File lib/docopt.rb, line 37
def dump
  puts ::Docopt::dump_patterns(self)
end
either() click to toggle source
# File lib/docopt.rb, line 84
def either
  ret = []
  groups = [[self]]
  while groups.count > 0
    children = groups.shift
    types = children.map { |child| child.class }

    if types.include?(Either)
      either = children.select { |child| child.class == Either }[0]
      children.slice!(children.index(either))
      for c in either.children
        groups << [c] + children
      end
    elsif types.include?(Required)
      required = children.select { |child| child.class == Required }[0]
      children.slice!(children.index(required))
      groups << required.children + children

    elsif types.include?(Optional)
      optional = children.select { |child| child.class == Optional }[0]
      children.slice!(children.index(optional))
      groups << optional.children + children

    elsif types.include?(AnyOptions)
      anyoptions = children.select { |child| child.class == AnyOptions }[0]
      children.slice!(children.index(anyoptions))
      groups << anyoptions.children + children

    elsif types.include?(OneOrMore)
      oneormore = children.select { |child| child.class == OneOrMore }[0]
      children.slice!(children.index(oneormore))
      groups << (oneormore.children * 2) + children

    else
      ret << children
    end
  end

  args = ret.map { |e| Required.new(*e) }
  return Either.new(*args)
end
fix() click to toggle source
# File lib/docopt.rb, line 41
def fix
  fix_identities
  fix_repeating_arguments
  return self
end
fix_identities(uniq=nil) click to toggle source
# File lib/docopt.rb, line 47
def fix_identities(uniq=nil)
  if not instance_variable_defined?(:@children)
    return self
  end
  uniq ||= flat.uniq

  @children.each_with_index do |c, i|
    if not c.instance_variable_defined?(:@children)
      if !uniq.include?(c)
        raise RuntimeError
      end
      @children[i] = uniq[uniq.index(c)]
    else
      c.fix_identities(uniq)
    end
  end
end
fix_repeating_arguments() click to toggle source
# File lib/docopt.rb, line 65
def fix_repeating_arguments
  either.children.map { |c| c.children }.each do |case_|
    case_.select { |c| case_.count(c) > 1 }.each do |e|
      if e.class == Argument or (e.class == Option and e.argcount > 0)
        if e.value == nil
          e.value = []
        elsif e.value.class != Array
          e.value = e.value.split
        end
      end
      if e.class == Command or (e.class == Option and e.argcount == 0)
        e.value = 0
      end
    end
  end

  return self
end
to_str() click to toggle source
# File lib/docopt.rb, line 33
def to_str
  return self.inspect
end