def invoke(*names, &block)
options = names.last.is_a?(Hash) ? names.pop : {}
verbose = options.fetch(:verbose, true)
names.each do |name|
invocations[name] = false
invocation_blocks[name] = block if block_given?
class_eval "def _invoke_\#{name.to_s.gsub(/\\W/, '_')}\nklass, command = self.class.prepare_for_invocation(nil, \#{name.inspect})\n\nif klass\nsay_status :invoke, \#{name.inspect}, \#{verbose.inspect}\nblock = self.class.invocation_blocks[\#{name.inspect}]\n_invoke_for_class_method klass, command, &block\nelse\nsay_status :error, %(\#{name.inspect} [not found]), :red\nend\nend\n", __FILE__, __LINE__
end
end