class Thor

def subcommand(subcommand, subcommand_class)

def subcommand(subcommand, subcommand_class)
  subcommands << subcommand.to_s
  subcommand_class.subcommand_help subcommand
  subcommand_classes[subcommand.to_s] = subcommand_class
  define_method(subcommand) do |*args|
    args, opts = Thor::Arguments.split(args)
    invoke_args = [args, opts, {:invoked_via_subcommand => true, :class_options => options}]
    invoke_args.unshift "help" if opts.delete("--help") || opts.delete("-h")
    invoke subcommand_class, *invoke_args
  end
end