From 4161d655ffbac91a9d86914e10066d9790799ac3 Mon Sep 17 00:00:00 2001 From: Fabien Jakimowicz Date: Sun, 24 May 2009 02:32:04 +0200 Subject: [PATCH 1/2] STI model / unit test generator --- .../generators/components/sti_model/USAGE | 13 ++++++++ .../components/sti_model/sti_model_generator.rb | 32 ++++++++++++++++++++ .../components/sti_model/templates/model.rb | 3 ++ .../components/sti_model/templates/unit_test.rb | 8 +++++ .../generators/rails_sti_model_generator_test.rb | 15 +++++++++ 5 files changed, 71 insertions(+), 0 deletions(-) create mode 100644 railties/lib/rails_generator/generators/components/sti_model/USAGE create mode 100644 railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb create mode 100644 railties/lib/rails_generator/generators/components/sti_model/templates/model.rb create mode 100644 railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb create mode 100644 railties/test/generators/rails_sti_model_generator_test.rb diff --git a/railties/lib/rails_generator/generators/components/sti_model/USAGE b/railties/lib/rails_generator/generators/components/sti_model/USAGE new file mode 100644 index 0000000..f4ab76d --- /dev/null +++ b/railties/lib/rails_generator/generators/components/sti_model/USAGE @@ -0,0 +1,13 @@ +Description: + Create a new STI model, using a parent name to inheritate. + + Both sti model and parent name can be either CamelCased or under_scored. + + This generates a model class in app/models and a unit test in test/unit. + +Examples: + `./script/generate sti_model admin user` + + creates an Admin model, which will inheritate from User model, test: + Model: app/models/admin.rb + Test: test/unit/admin_test.rb diff --git a/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb b/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb new file mode 100644 index 0000000..06b0894 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb @@ -0,0 +1,32 @@ +class StiModelGenerator < Rails::Generator::NamedBase + default_options :skip_unit_test => false + + def manifest + record do |m| + # Check for class naming collisions. + m.class_collisions class_name, "#{class_name}Test" + + # Model and test directories. + m.directory File.join('app/models', class_path) + m.directory File.join('test/unit', class_path) + + # Model class and unit test + m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb"), :assigns => assigns + m.template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb"), :assigns => assigns + + end + end + + protected + def banner + "Usage: #{$0} #{spec.name} STIModelName ModelParentName" + end + + def assigns + {:parent_class_name => parent_class_name} + end + + def parent_class_name + @args.first.try(:camelize) || usage + end +end diff --git a/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb b/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb new file mode 100644 index 0000000..d0037b3 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb @@ -0,0 +1,3 @@ +class <%= class_name %> < <%= parent_class_name %> + +end \ No newline at end of file diff --git a/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb b/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb new file mode 100644 index 0000000..3e0bc29 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class <%= class_name %>Test < ActiveSupport::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end diff --git a/railties/test/generators/rails_sti_model_generator_test.rb b/railties/test/generators/rails_sti_model_generator_test.rb new file mode 100644 index 0000000..2ef21c4 --- /dev/null +++ b/railties/test/generators/rails_sti_model_generator_test.rb @@ -0,0 +1,15 @@ +require 'generators/generator_test_helper' + +class RailsStiModelGeneratorTest < GeneratorTestCase + + def test_sti_model_generates_resources + run_generator('sti_model', %w(Car Product)) + + assert_generated_model_for :car, "Product" + assert_generated_unit_test_for :car + end + + def test_sti_model_must_have_a_parent_class_name + assert_raise(Rails::Generator::UsageError) { run_generator('sti_model', %w(Car)) } + end +end \ No newline at end of file -- 1.6.2.5 From 78c8cee26f25a730aaf6655789f9214b4c4dcf28 Mon Sep 17 00:00:00 2001 From: Fabien Jakimowicz Date: Tue, 26 May 2009 13:48:18 +0200 Subject: [PATCH 2/2] renaming sti_model generator to model_subclass --- .../generators/components/model_subclass/USAGE | 13 ++++++++ .../model_subclass/model_subclass_generator.rb | 32 ++++++++++++++++++++ .../components/model_subclass/templates/model.rb | 3 ++ .../model_subclass/templates/unit_test.rb | 8 +++++ .../generators/components/sti_model/USAGE | 13 -------- .../components/sti_model/sti_model_generator.rb | 32 -------------------- .../components/sti_model/templates/model.rb | 3 -- .../components/sti_model/templates/unit_test.rb | 8 ----- .../rails_model_subclass_generator_test.rb | 15 +++++++++ .../generators/rails_sti_model_generator_test.rb | 15 --------- 10 files changed, 71 insertions(+), 71 deletions(-) create mode 100644 railties/lib/rails_generator/generators/components/model_subclass/USAGE create mode 100644 railties/lib/rails_generator/generators/components/model_subclass/model_subclass_generator.rb create mode 100644 railties/lib/rails_generator/generators/components/model_subclass/templates/model.rb create mode 100644 railties/lib/rails_generator/generators/components/model_subclass/templates/unit_test.rb delete mode 100644 railties/lib/rails_generator/generators/components/sti_model/USAGE delete mode 100644 railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb delete mode 100644 railties/lib/rails_generator/generators/components/sti_model/templates/model.rb delete mode 100644 railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb create mode 100644 railties/test/generators/rails_model_subclass_generator_test.rb delete mode 100644 railties/test/generators/rails_sti_model_generator_test.rb diff --git a/railties/lib/rails_generator/generators/components/model_subclass/USAGE b/railties/lib/rails_generator/generators/components/model_subclass/USAGE new file mode 100644 index 0000000..c4dbbfb --- /dev/null +++ b/railties/lib/rails_generator/generators/components/model_subclass/USAGE @@ -0,0 +1,13 @@ +Description: + Create a model subclass of parent, used for Single Table Inheritance. + + Both subclass and parent name can be either CamelCased or under_scored. + + This generates a model class in app/models and a unit test in test/unit. + +Examples: + `./script/generate model_subclass admin user` + + creates an Admin model, which will inheritate from User model, test: + Model: app/models/admin.rb + Test: test/unit/admin_test.rb diff --git a/railties/lib/rails_generator/generators/components/model_subclass/model_subclass_generator.rb b/railties/lib/rails_generator/generators/components/model_subclass/model_subclass_generator.rb new file mode 100644 index 0000000..79e382e --- /dev/null +++ b/railties/lib/rails_generator/generators/components/model_subclass/model_subclass_generator.rb @@ -0,0 +1,32 @@ +class ModelSubclassGenerator < Rails::Generator::NamedBase + default_options :skip_unit_test => false + + def manifest + record do |m| + # Check for class naming collisions. + m.class_collisions class_name, "#{class_name}Test" + + # Model and test directories. + m.directory File.join('app/models', class_path) + m.directory File.join('test/unit', class_path) + + # Model class and unit test + m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb"), :assigns => assigns + m.template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb"), :assigns => assigns + + end + end + + protected + def banner + "Usage: #{$0} #{spec.name} Subclass Parent" + end + + def assigns + {:parent_class_name => parent_class_name} + end + + def parent_class_name + @args.first.try(:camelize) || usage + end +end diff --git a/railties/lib/rails_generator/generators/components/model_subclass/templates/model.rb b/railties/lib/rails_generator/generators/components/model_subclass/templates/model.rb new file mode 100644 index 0000000..d0037b3 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/model_subclass/templates/model.rb @@ -0,0 +1,3 @@ +class <%= class_name %> < <%= parent_class_name %> + +end \ No newline at end of file diff --git a/railties/lib/rails_generator/generators/components/model_subclass/templates/unit_test.rb b/railties/lib/rails_generator/generators/components/model_subclass/templates/unit_test.rb new file mode 100644 index 0000000..3e0bc29 --- /dev/null +++ b/railties/lib/rails_generator/generators/components/model_subclass/templates/unit_test.rb @@ -0,0 +1,8 @@ +require 'test_helper' + +class <%= class_name %>Test < ActiveSupport::TestCase + # Replace this with your real tests. + test "the truth" do + assert true + end +end diff --git a/railties/lib/rails_generator/generators/components/sti_model/USAGE b/railties/lib/rails_generator/generators/components/sti_model/USAGE deleted file mode 100644 index f4ab76d..0000000 --- a/railties/lib/rails_generator/generators/components/sti_model/USAGE +++ /dev/null @@ -1,13 +0,0 @@ -Description: - Create a new STI model, using a parent name to inheritate. - - Both sti model and parent name can be either CamelCased or under_scored. - - This generates a model class in app/models and a unit test in test/unit. - -Examples: - `./script/generate sti_model admin user` - - creates an Admin model, which will inheritate from User model, test: - Model: app/models/admin.rb - Test: test/unit/admin_test.rb diff --git a/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb b/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb deleted file mode 100644 index 06b0894..0000000 --- a/railties/lib/rails_generator/generators/components/sti_model/sti_model_generator.rb +++ /dev/null @@ -1,32 +0,0 @@ -class StiModelGenerator < Rails::Generator::NamedBase - default_options :skip_unit_test => false - - def manifest - record do |m| - # Check for class naming collisions. - m.class_collisions class_name, "#{class_name}Test" - - # Model and test directories. - m.directory File.join('app/models', class_path) - m.directory File.join('test/unit', class_path) - - # Model class and unit test - m.template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb"), :assigns => assigns - m.template 'unit_test.rb', File.join('test/unit', class_path, "#{file_name}_test.rb"), :assigns => assigns - - end - end - - protected - def banner - "Usage: #{$0} #{spec.name} STIModelName ModelParentName" - end - - def assigns - {:parent_class_name => parent_class_name} - end - - def parent_class_name - @args.first.try(:camelize) || usage - end -end diff --git a/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb b/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb deleted file mode 100644 index d0037b3..0000000 --- a/railties/lib/rails_generator/generators/components/sti_model/templates/model.rb +++ /dev/null @@ -1,3 +0,0 @@ -class <%= class_name %> < <%= parent_class_name %> - -end \ No newline at end of file diff --git a/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb b/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb deleted file mode 100644 index 3e0bc29..0000000 --- a/railties/lib/rails_generator/generators/components/sti_model/templates/unit_test.rb +++ /dev/null @@ -1,8 +0,0 @@ -require 'test_helper' - -class <%= class_name %>Test < ActiveSupport::TestCase - # Replace this with your real tests. - test "the truth" do - assert true - end -end diff --git a/railties/test/generators/rails_model_subclass_generator_test.rb b/railties/test/generators/rails_model_subclass_generator_test.rb new file mode 100644 index 0000000..9d5d3fd --- /dev/null +++ b/railties/test/generators/rails_model_subclass_generator_test.rb @@ -0,0 +1,15 @@ +require 'generators/generator_test_helper' + +class RailsModelSubclassGeneratorTest < GeneratorTestCase + + def test_model_subclass_generates_resources + run_generator('model_subclass', %w(Car Product)) + + assert_generated_model_for :car, "Product" + assert_generated_unit_test_for :car + end + + def test_model_subclass_must_have_a_parent_class_name + assert_raise(Rails::Generator::UsageError) { run_generator('model_subclass', %w(Car)) } + end +end \ No newline at end of file diff --git a/railties/test/generators/rails_sti_model_generator_test.rb b/railties/test/generators/rails_sti_model_generator_test.rb deleted file mode 100644 index 2ef21c4..0000000 --- a/railties/test/generators/rails_sti_model_generator_test.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'generators/generator_test_helper' - -class RailsStiModelGeneratorTest < GeneratorTestCase - - def test_sti_model_generates_resources - run_generator('sti_model', %w(Car Product)) - - assert_generated_model_for :car, "Product" - assert_generated_unit_test_for :car - end - - def test_sti_model_must_have_a_parent_class_name - assert_raise(Rails::Generator::UsageError) { run_generator('sti_model', %w(Car)) } - end -end \ No newline at end of file -- 1.6.2.5