aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/generators/base.rb
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-06-26 20:26:10 +0200
committerJosé Valim <jose.valim@gmail.com>2009-06-26 20:26:10 +0200
commit95a5cc6167ce8ff57d90190d3e21f49abb1eb060 (patch)
tree027115591e9eaf66754888d529fa30367da97d6d /railties/lib/generators/base.rb
parent54208cbe60492d3ee8e8daf156eebc818a617181 (diff)
downloadrails-95a5cc6167ce8ff57d90190d3e21f49abb1eb060.tar.gz
rails-95a5cc6167ce8ff57d90190d3e21f49abb1eb060.tar.bz2
rails-95a5cc6167ce8ff57d90190d3e21f49abb1eb060.zip
Add invoke_iff and invoke_for to the public interface.
Diffstat (limited to 'railties/lib/generators/base.rb')
-rw-r--r--railties/lib/generators/base.rb222
1 files changed, 111 insertions, 111 deletions
diff --git a/railties/lib/generators/base.rb b/railties/lib/generators/base.rb
index cfb7e0481c..10bd1ea4af 100644
--- a/railties/lib/generators/base.rb
+++ b/railties/lib/generators/base.rb
@@ -44,6 +44,117 @@ module Rails
@namespace ||= "#{base_name}:generators:#{generator_name}"
end
+ # Invoke a generator based on the value supplied by the user to the
+ # given option named "name". A class option is created when this method
+ # is invoked and you can set a hash to customize it, although type and
+ # default values cannot be given.
+ #
+ # ==== Examples
+ #
+ # class ControllerGenerator < Rails::Generators::Base
+ # invoke_for :test_framework, :aliases => "-t"
+ # end
+ #
+ # The example above will create a test framework option and will invoke
+ # a generator based on the user supplied value.
+ #
+ # For example, if the user invoke the controller generator as:
+ #
+ # ruby script/generate controller Account --test-framework=test_unit
+ #
+ # The controller generator will then invoke "test_unit:generators:controller".
+ # If it can't be found it then tries to invoke only "test_unit".
+ #
+ # This allows any test framework to hook into Rails as long as it
+ # provides a "test_framework:generators:controller" generator.
+ #
+ # Finally, if the user don't want to use any test framework, he can do:
+ #
+ # ruby script/generate controller Account --skip-test-framework
+ #
+ # Or similarly:
+ #
+ # ruby script/generate controller Account --no-test-framework
+ #
+ def self.invoke_for(*names)
+ default_options = names.extract_options!
+
+ names.each do |name|
+ options = default_options.dup
+ options[:desc] ||= "#{name.to_s.humanize} to be used"
+ options[:banner] ||= "NAME"
+ options[:aliases] ||= "-" + name.to_s.gsub(/_framework$/, '').split('_').last[0,1]
+
+ class_option name, options.merge!(:type => :default, :default => DEFAULTS[name])
+
+ class_eval <<-METHOD, __FILE__, __LINE__
+ def invoke_#{name}
+ return unless options[#{name.inspect}]
+
+ klass = Rails::Generators.find_by_namespace(options[#{name.inspect}],
+ nil, self.class.generator_name)
+
+ if klass
+ invoke klass
+ else
+ task = "\#{options[#{name.inspect}]}:generators:\#{self.class.generator_name}"
+ say "Could not find and invoke '\#{task}'."
+ end
+ end
+ METHOD
+ end
+ end
+
+ # Invoke a generator with the given name if the user requires it. The
+ # difference to invoke_for is that the class option here is boolean
+ # and the generator invoked is not based on user input.
+ #
+ # A class option is created when this method is invoked and you can set
+ # a hash to customize it, although type and default values cannot be
+ # given.
+ #
+ # ==== Examples
+ #
+ # class ControllerGenerator < Rails::Generators::Base
+ # invoke_if :webrat, :aliases => "-w"
+ # end
+ #
+ # The example above will create a helper option and will be invoked
+ # when the user requires so:
+ #
+ # ruby script/generate controller Account --webrat
+ #
+ # The controller generator will then try to invoke the following generators:
+ #
+ # "rails:generators:webrat", "webrat:generators:controller", "webrat"
+ #
+ def self.invoke_if(*names)
+ default_options = names.extract_options!
+
+ names.each do |name|
+ options = default_options.dup
+ options[:desc] ||= "Indicates when to use #{name.to_s.humanize}"
+ options[:aliases] ||= "-" + name.to_s.last[0,1]
+
+ class_option name, options.merge!(:type => :boolean, :default => DEFAULTS[name] || false)
+
+ class_eval <<-METHOD, __FILE__, __LINE__
+ def invoke_#{name}
+ return unless options[#{name.inspect}]
+
+ klass = Rails::Generators.find_by_namespace(#{name.inspect},
+ self.class.base_name, self.class.generator_name)
+
+ if klass
+ invoke klass
+ else
+ say "Could not find and invoke '#{name.inspect}'."
+ end
+ end
+ METHOD
+ end
+ end
+
protected
# Check whether the given class names are already taken by user
@@ -118,117 +229,6 @@ module Rails
end
end
- # Invoke a generator based on the value supplied by the user to the
- # given option named "name". A class option is created when this method
- # is invoked and you can set a hash to customize it, although type and
- # default values cannot be given.
- #
- # ==== Examples
- #
- # class ControllerGenerator < Rails::Generators::Base
- # invoke_for :test_framework, :aliases => "-t"
- # end
- #
- # The example above will create a test framework option and will invoke
- # a generator based on the user supplied value.
- #
- # For example, if the user invoke the controller generator as:
- #
- # ruby script/generate controller Account --test-framework=test_unit
- #
- # The controller generator will then invoke "test_unit:generators:controller".
- # If it can't be found it then tries to invoke only "test_unit".
- #
- # This allows any test framework to hook into Rails as long as it
- # provides a "test_framework:generators:controller" generator.
- #
- # Finally, if the user don't want to use any test framework, he can do:
- #
- # ruby script/generate controller Account --skip-test-framework
- #
- # Or similarly:
- #
- # ruby script/generate controller Account --no-test-framework
- #
- def self.invoke_for(*names)
- default_options = names.extract_options!
-
- names.each do |name|
- options = default_options.dup
- options[:desc] ||= "#{name.to_s.humanize} to be used"
- options[:banner] ||= "NAME"
- options[:aliases] ||= "-" + name.to_s.gsub(/_framework$/, '').split('_').last[0,1]
-
- class_option name, options.merge!(:type => :default, :default => DEFAULTS[name])
-
- class_eval <<-METHOD, __FILE__, __LINE__
- def invoke_#{name}
- return unless options[#{name.inspect}]
-
- klass = Rails::Generators.find_by_namespace(options[#{name.inspect}],
- nil, self.class.generator_name)
-
- if klass
- invoke klass
- else
- task = "\#{options[#{name.inspect}]}:generators:\#{self.class.generator_name}"
- say "Could not find and invoke '\#{task}'."
- end
- end
- METHOD
- end
- end
-
- # Invoke a generator with the given name if the user requires it. The
- # difference to invoke_for is that the class option here is boolean
- # and the generator invoked is not based on user input.
- #
- # A class option is created when this method is invoked and you can set
- # a hash to customize it, although type and default values cannot be
- # given.
- #
- # ==== Examples
- #
- # class ControllerGenerator < Rails::Generators::Base
- # invoke_if :webrat, :aliases => "-w"
- # end
- #
- # The example above will create a helper option and will be invoked
- # when the user requires so:
- #
- # ruby script/generate controller Account --webrat
- #
- # The controller generator will then try to invoke the following generators:
- #
- # "rails:generators:webrat", "webrat:generators:controller", "webrat"
- #
- def self.invoke_if(*names)
- default_options = names.extract_options!
-
- names.each do |name|
- options = default_options.dup
- options[:desc] ||= "Indicates when to use #{name.to_s.humanize}"
- options[:aliases] ||= "-" + name.to_s.last[0,1]
-
- class_option name, options.merge!(:type => :boolean, :default => DEFAULTS[name] || false)
-
- class_eval <<-METHOD, __FILE__, __LINE__
- def invoke_#{name}
- return unless options[#{name.inspect}]
-
- klass = Rails::Generators.find_by_namespace(#{name.inspect},
- self.class.base_name, self.class.generator_name)
-
- if klass
- invoke klass
- else
- say "Could not find and invoke '#{name.inspect}'."
- end
- end
- METHOD
- end
- end
-
end
end
end