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