dencli/lib/dencli/cmd.rb

32 lines
851 B
Ruby

require_relative '../dencli'
class DenCli::CMD
attr_reader :parent, :name, :desc, :exe, :completion
def initialize parent, name, desc, exe
raise "Proc expected, instead of: #{exe.inspect}" unless Proc === exe
@parent, @name, @desc, @exe = parent, name, desc, exe
completion {|*a| [] }
end
def _full_cmd( post) parent._full_cmd [@name]+post end
def full_cmd() _full_cmd [] end
def call( *a) @exe.call *a end
def help() "#{parent.full_cmd.join ' '} #{name}\n#{ desc}" end
def complete( *pre, str) @completion.call *pre, str end
def completion &exe
@completion = exe
self
end
def inspect
"#<%s:0x%x %s @name=%p @desc=%p @parent=<%s:0x%x %s> @exe=<arity=%d>>" % [
self.class.name, self.object_id, self.full_cmd,
@name, @desc, @parent.class.name, @parent.class.object_id, @parent.full_cmd,
@exe.arity
]
end
end