class Samovar::Nested

Attributes

commands[R]
default[R]
key[R]
required[R]

Public Class Methods

new(key, commands, default: nil, required: false) click to toggle source
# File lib/samovar/nested.rb, line 8
def initialize(key, commands, default: nil, required: false)
        @key = key
        @commands = commands
        
        # This is the default name [of a command], not the default command:
        @default = default
        
        @required = required
end

Public Instance Methods

parse(input, parent = nil, default = nil) click to toggle source

@param default [Command] the default command if any.

# File lib/samovar/nested.rb, line 48
def parse(input, parent = nil, default = nil)
        if command = @commands[input.first]
                name = input.shift
                
                # puts "Instantiating #{command} with #{input}"
                command.new(input, name: name, parent: parent)
        elsif default
                return default
        elsif @default
                @commands[@default].new(input, name: @default, parent: parent)
        elsif @required
                raise MissingValueError.new(parent, self)
        end
end
to_a() click to toggle source
# File lib/samovar/nested.rb, line 27
def to_a
        usage = [self.to_s]
        
        if @commands.size == 0
                usage << "No commands available."
        elsif @commands.size == 1
                usage << "Only #{@commands.first}."
        else
                usage << "One of: #{@commands.keys.join(', ')}."
        end
        
        if @default
                usage << "(default: #{@default})"
        elsif @required
                usage << "(required)"
        end
        
        return usage
end
to_s() click to toggle source
# File lib/samovar/nested.rb, line 23
def to_s
        "<#{@key}>"
end
usage(rows) click to toggle source
# File lib/samovar/nested.rb, line 63
def usage(rows)
        rows << self
        
        @commands.each do |key, klass|
                klass.usage(rows, key)
        end
end