class DenCli::Sub

Attributes

aliases[R]
description[R]
name[R]
parent[R]
subs[R]

Public Class Methods

new(parent, name, description) click to toggle source
# File lib/dencli/sub.rb, line 6
def initialize parent, name, description
        @parent, @name, @description, @subs, @aliases = parent, name, "-> #{description}", {}, {}
end

Public Instance Methods

[]( k) click to toggle source
# File lib/dencli/sub.rb, line 12
def []( k) @aliases[k] end
_full_cmd( post) click to toggle source
# File lib/dencli/sub.rb, line 10
def _full_cmd( post) parent._full_cmd [@name]+post end
call(*a) click to toggle source
# File lib/dencli/sub.rb, line 33
def call *a
        n, *a = *a
        if @aliases.has_key? n
                @aliases[n].call *a
        else
                raise DenCli::UnknownCommand, "unknown command: #{_full_cmd( [n])[1..-1].join ' '}, available for #{full_cmd[1..-1].join' '}: #{@subs.keys.join ' '}"
        end
end
cmd(name, description, min: nil, aliases: nil, &exe) click to toggle source
# File lib/dencli/sub.rb, line 58
def cmd name, description, min: nil, aliases: nil, &exe
        _add name, min, DenCli::CMD.new( self, name, description, exe), aliases
end
complete(*pre, str) click to toggle source
# File lib/dencli/sub.rb, line 62
def complete *pre, str
        if pre.empty?
                @subs.keys.grep /\A#{Regexp.escape str}/
        elsif sub = @subs[pre[0]]
                sub.complete *pre[1..-1], str
        else
                STDOUT.print "\a"
        end
end
full_cmd() click to toggle source
# File lib/dencli/sub.rb, line 11
def full_cmd() _full_cmd [] end
help(n = nil, *a) click to toggle source
# File lib/dencli/sub.rb, line 18
def help n = nil, *a
        if n.nil?
                r = "#{full_cmd.join ' '}: #{description}\n\n"
                m = @subs.map {|k,c| k.nil? ? 0 : c.usage.length }.max
                @subs.each do |k, c|
                        r += "  % -#{m}s  %s\n" % [c.usage, c.description]  unless k.nil?
                end
                r
        elsif @aliases.has_key? n
                @aliases[n].help *a
        else
                raise DenCli::UnknownCommand, "unknown command: #{_full_cmd( [n])[1..-1].join ' '}, available for #{full_cmd[1..-1].join' '}: #{@subs.keys.join ' '}"
        end
end
inspect() click to toggle source
# File lib/dencli/sub.rb, line 72
def inspect
        "#<%s:0x%x %s @name=%p @description=%p @subs={%s} @aliases={%s} @parent=<%s:0x%x %s>>" % [
                self.class.name, self.object_id, self.full_cmd,
                @name, @description, @subs.keys.join(', '), @aliases.keys.join(', '), @parent.class.name, @parent.class.object_id, @parent.full_cmd
        ]
end
sub(name, description, min: nil, aliases: nil) { |r| ... } click to toggle source
# File lib/dencli/sub.rb, line 53
def sub name, description, min: nil, aliases: nil, &exe
        r = _add name, min, DenCli::Sub.new( self, name, description), aliases
        block_given? ? yield( r) : r
end
usage() click to toggle source
# File lib/dencli/sub.rb, line 14
def usage
        "#{full_cmd.join ' '} ..."
end

Private Instance Methods

_add(name, min, obj, aliases) click to toggle source
# File lib/dencli/sub.rb, line 42
def _add name, min, obj, aliases
        name = name.to_s  unless name.nil?
        @subs[name] = obj
        DenCli.gen_aliases( name, min) {|a| @aliases[a] = obj }
        if aliases
                [*aliases].each {|a| @aliases[a] = obj }
        end
        obj
end