aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--railties/lib/generators/rails/generator/USAGE11
-rw-r--r--railties/lib/generators/rails/generator/generator_generator.rb26
-rw-r--r--railties/lib/generators/rails/generator/templates/USAGE8
-rw-r--r--railties/lib/generators/rails/generator/templates/generator.rb5
-rw-r--r--railties/test/generators/generator_generator_test.rb26
5 files changed, 76 insertions, 0 deletions
diff --git a/railties/lib/generators/rails/generator/USAGE b/railties/lib/generators/rails/generator/USAGE
new file mode 100644
index 0000000000..ca7d3f62d0
--- /dev/null
+++ b/railties/lib/generators/rails/generator/USAGE
@@ -0,0 +1,11 @@
+Description:
+ Stubs out a new generator at lib/generators. Pass the generator name, either
+ CamelCased or under_scored, as an argument.
+
+Example:
+ `./script/generate generator Awesome`
+
+ creates a standard awesome generator:
+ lib/generators/awesome/
+ lib/generators/awesome/awesome_generator.rb
+ lib/generators/awesome/templates/
diff --git a/railties/lib/generators/rails/generator/generator_generator.rb b/railties/lib/generators/rails/generator/generator_generator.rb
new file mode 100644
index 0000000000..8a4e949b3d
--- /dev/null
+++ b/railties/lib/generators/rails/generator/generator_generator.rb
@@ -0,0 +1,26 @@
+module Rails
+ module Generators
+ class GeneratorGenerator < NamedBase
+ check_class_collision :suffix => "Generator"
+
+ def copy_generator_file
+ template "generator.rb", generator_dir("#{file_name}_generator.rb")
+ end
+
+ def copy_usage_file
+ template "USAGE", generator_dir("USAGE")
+ end
+
+ def create_templates_dir
+ empty_directory generator_dir("templates")
+ end
+
+ protected
+
+ def generator_dir(join)
+ File.join("lib", "generators", file_name, join)
+ end
+
+ end
+ end
+end
diff --git a/railties/lib/generators/rails/generator/templates/USAGE b/railties/lib/generators/rails/generator/templates/USAGE
new file mode 100644
index 0000000000..ea9f4f12cc
--- /dev/null
+++ b/railties/lib/generators/rails/generator/templates/USAGE
@@ -0,0 +1,8 @@
+Description:
+ Explain the generator
+
+Example:
+ ./script/generate <%= file_name %> Thing
+
+ This will create:
+ what/will/it/create
diff --git a/railties/lib/generators/rails/generator/templates/generator.rb b/railties/lib/generators/rails/generator/templates/generator.rb
new file mode 100644
index 0000000000..675f00043f
--- /dev/null
+++ b/railties/lib/generators/rails/generator/templates/generator.rb
@@ -0,0 +1,5 @@
+class <%= class_name %>Generator < Rails::Generators::NamedBase
+ def self.source_root
+ @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
+ end
+end
diff --git a/railties/test/generators/generator_generator_test.rb b/railties/test/generators/generator_generator_test.rb
new file mode 100644
index 0000000000..e31f4eb4be
--- /dev/null
+++ b/railties/test/generators/generator_generator_test.rb
@@ -0,0 +1,26 @@
+require 'abstract_unit'
+require 'generators/generators_test_helper'
+require 'generators/rails/generator/generator_generator'
+
+class GeneratorGeneratorTest < GeneratorsTestCase
+
+ def test_generator_skeleton_is_created
+ run_generator
+
+ %w(
+ lib/generators/awesome
+ lib/generators/awesome/USAGE
+ lib/generators/awesome/templates
+ ).each{ |path| assert_file path }
+
+ assert_file "lib/generators/awesome/awesome_generator.rb",
+ /class AwesomeGenerator < Rails::Generators::NamedBase/
+ end
+
+ protected
+
+ def run_generator(args=["awesome"], config={})
+ silence(:stdout) { Rails::Generators::GeneratorGenerator.start args, config.merge(:root => destination_root) }
+ end
+
+end