class MyCounter < Thor::Group include Thor::Actions add_runtime_options! def self.get_from_super from_superclass(:get_from_super, 13) end source_root File.expand_path(File.dirname(__FILE__)) source_paths << File.expand_path("broken", File.dirname(__FILE__)) argument :first, :type => :numeric argument :second, :type => :numeric, :default => 2 class_option :third, :type => :numeric, :desc => "The third argument", :default => 3, :banner => "THREE", :aliases => "-t" class_option :fourth, :type => :numeric, :desc => "The fourth argument" class_option :simple, :type => :numeric, :aliases => 'z' class_option :symbolic, :type => :numeric, :aliases => [:y, :r] desc <<-FOO Description: This generator runs three commands: one, two and three. FOO def one first end def two second end def three options[:third] end def four options[:fourth] end def five options[:simple] end def six options[:symbolic] end def self.inherited(base) super base.source_paths.unshift(File.expand_path(File.join(File.dirname(__FILE__), "doc"))) end no_commands do def world(&block) result = capture(&block) concat(result.strip + " world!") end end end class ClearCounter < MyCounter remove_argument :first, :second, :undefine => true remove_class_option :third def self.source_root File.expand_path(File.join(File.dirname(__FILE__), "bundle")) end end class BrokenCounter < MyCounter namespace "app:broken:counter" class_option :fail, :type => :boolean, :default => false class << self undef_method :source_root end def one options[:first] end def four respond_to?(:fail) end def five options[:fail] ? this_method_does_not_exist : 5 end end class WhinyGenerator < Thor::Group include Thor::Actions def self.source_root File.expand_path(File.dirname(__FILE__)) end def wrong_arity(required) end end class CommandConflict < Thor::Group desc "A group with the same name as a default command" def group puts "group" end end class ParentGroup < Thor::Group private def foo "foo" end def baz(name = 'baz') name end end class ChildGroup < ParentGroup def bar "bar" end public_command :foo, :baz end