lib/adhearsion/generators.rb in adhearsion-2.0.0.alpha2 vs lib/adhearsion/generators.rb in adhearsion-2.0.0.alpha3
- old
+ new
@@ -1,5 +1,56 @@
module Adhearsion
module Generators
extend ActiveSupport::Autoload
- end
-end
+
+ autoload :Generator
+
+ class << self
+
+ # Show help message with available generators.
+ def help(command = 'generate')
+ puts "Usage: ahn #{command} GENERATOR_NAME [args] [options]"
+ puts
+ puts "Please choose a generator below."
+ puts
+
+ mappings.each_pair do |name, klass|
+ puts name
+ end
+ end
+
+ def invoke(generator_name, args = ARGV)
+ klass = Generators.mappings[generator_name.to_sym]
+ raise UnknownGeneratorError, generator_name unless klass
+
+ args << "--help" if args.empty? && klass.arguments.any?(&:required?)
+
+ klass.start args
+ end
+
+ ##
+ # Return a ordered list of task with their class
+ #
+ def mappings
+ @_mappings ||= Hash.new
+ end
+
+ ##
+ # Globally add a new generator class to +ahn generate+
+ #
+ # @param [Symbol] name
+ # key name for generator mapping
+ # @param [Class] klass
+ # class of generator
+ #
+ # @return [Hash] generator mappings
+ #
+ # @example
+ # Adhearsion::Generators.add_generator :myplugin, MyPluginGenerator
+ #
+ def add_generator(name, klass)
+ mappings[name] = klass
+ end
+
+ end#class << self
+ end#module
+end#module