From 4494a752c3c568c65fa899c54486153a1a5fa187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 23 Jun 2009 19:10:42 +0200 Subject: [PATCH] Change current sstructure. --- railties/bin/gen | 8 +- railties/bin/rails | 4 +- railties/lib/{generator.rb => generators.rb} | 9 +- .../lib/{generator => generators}/actions.rb | 0 .../lib/{generator => generators}/base.rb | 4 +- .../generated_attribute.rb | 0 .../{generator => generators}/named_base.rb | 4 +- .../generators => generators/rails}/app/USAGE | 0 .../rails}/app/app_generator.rb | 0 .../rails}/app/templates/README | 0 .../rails}/app/templates/Rakefile | 0 .../app/controllers/application_controller.rb | 0 .../app/helpers/application_helper.rb | 0 .../app/templates/app/models/.empty_directory | 0 .../app/views/layouts/.empty_directory | 0 .../rails}/app/templates/config/boot.rb | 0 .../templates/config/databases/frontbase.yml | 0 .../app/templates/config/databases/ibm_db.yml | 0 .../app/templates/config/databases/mysql.yml | 0 .../app/templates/config/databases/oracle.yml | 0 .../templates/config/databases/postgresql.yml | 0 .../templates/config/databases/sqlite2.yml | 0 .../templates/config/databases/sqlite3.yml | 0 .../app/templates/config/environment.rb | 0 .../config/environments/development.rb | 0 .../config/environments/production.rb | 0 .../app/templates/config/environments/test.rb | 0 .../initializers/backtrace_silencers.rb | 0 .../config/initializers/inflections.rb | 0 .../config/initializers/mime_types.rb | 0 .../config/initializers/new_rails_defaults.rb | 0 .../config/initializers/session_store.rb.tt | 0 .../app/templates/config/locales/en.yml | 0 .../rails}/app/templates/config/routes.rb | 0 .../rails}/app/templates/db/seeds.rb | 0 .../app/templates/dispatchers/config.ru | 0 .../app/templates/dispatchers/dispatch.fcgi | 0 .../app/templates/dispatchers/dispatch.rb | 0 .../app/templates/dispatchers/gateway.cgi | 0 .../rails}/app/templates/doc/README_FOR_APP | 0 .../rails}/app/templates/public/404.html | 0 .../rails}/app/templates/public/422.html | 0 .../rails}/app/templates/public/500.html | 0 .../rails}/app/templates/public/favicon.ico | 0 .../app/templates/public/images/rails.png | Bin .../rails}/app/templates/public/index.html | 0 .../public/javascripts/application.js | 0 .../templates/public/javascripts/controls.js | 0 .../templates/public/javascripts/dragdrop.js | 0 .../templates/public/javascripts/effects.js | 0 .../templates/public/javascripts/prototype.js | 0 .../rails}/app/templates/public/robots.txt | 0 .../public/stylesheets/.empty_directory | 0 .../rails}/app/templates/script/about.tt | 0 .../rails}/app/templates/script/console.tt | 0 .../rails}/app/templates/script/dbconsole.tt | 0 .../rails}/app/templates/script/destroy.tt | 0 .../rails}/app/templates/script/generate.tt | 0 .../script/performance/benchmarker.tt | 0 .../templates/script/performance/profiler.tt | 0 .../rails}/app/templates/script/plugin.tt | 0 .../rails}/app/templates/script/runner.tt | 0 .../rails}/app/templates/script/server.tt | 0 .../templates/test/fixtures/.empty_directory | 0 .../test/functional/.empty_directory | 0 .../test/integration/.empty_directory | 0 .../test/performance/performance_test.rb | 0 .../rails}/app/templates/test/test_helper.rb | 0 .../app/templates/test/unit/.empty_directory | 0 .../rails}/metal/USAGE | 0 .../rails}/metal/metal_generator.rb | 0 .../rails}/metal/templates/metal.rb | 0 .../test/generator/generator_test_helper.rb | 55 --- .../{generator => generators}/actions_test.rb | 4 +- .../{generator => generators}/app_test.rb | 2 +- .../test/generators/generator_test_helper.rb | 313 ++---------------- .../rails_generator/generator_test_helper.rb | 303 +++++++++++++++++ .../rails_controller_generator_test.rb | 0 .../rails_helper_generator_test.rb | 0 .../rails_mailer_generator_test.rb | 0 .../rails_model_generator_test.rb | 0 .../rails_model_subclass_generator_test.rb | 0 .../rails_resource_generator_test.rb | 0 .../rails_scaffold_generator_test.rb | 0 84 files changed, 355 insertions(+), 351 deletions(-) rename railties/lib/{generator.rb => generators.rb} (72%) rename railties/lib/{generator => generators}/actions.rb (100%) rename railties/lib/{generator => generators}/base.rb (95%) rename railties/lib/{generator => generators}/generated_attribute.rb (100%) rename railties/lib/{generator => generators}/named_base.rb (97%) rename railties/lib/{generator/generators => generators/rails}/app/USAGE (100%) rename railties/lib/{generator/generators => generators/rails}/app/app_generator.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/README (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/Rakefile (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/app/controllers/application_controller.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/app/helpers/application_helper.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/app/models/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/app/views/layouts/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/boot.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/frontbase.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/ibm_db.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/mysql.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/oracle.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/postgresql.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/sqlite2.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/databases/sqlite3.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/environment.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/environments/development.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/environments/production.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/environments/test.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/initializers/backtrace_silencers.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/initializers/inflections.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/initializers/mime_types.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/initializers/new_rails_defaults.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/initializers/session_store.rb.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/locales/en.yml (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/config/routes.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/db/seeds.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/dispatchers/config.ru (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/dispatchers/dispatch.fcgi (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/dispatchers/dispatch.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/dispatchers/gateway.cgi (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/doc/README_FOR_APP (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/404.html (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/422.html (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/500.html (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/favicon.ico (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/images/rails.png (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/index.html (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/javascripts/application.js (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/javascripts/controls.js (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/javascripts/dragdrop.js (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/javascripts/effects.js (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/javascripts/prototype.js (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/robots.txt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/public/stylesheets/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/about.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/console.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/dbconsole.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/destroy.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/generate.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/performance/benchmarker.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/performance/profiler.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/plugin.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/runner.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/script/server.tt (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/fixtures/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/functional/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/integration/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/performance/performance_test.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/test_helper.rb (100%) rename railties/lib/{generator/generators => generators/rails}/app/templates/test/unit/.empty_directory (100%) rename railties/lib/{generator/generators => generators/rails}/metal/USAGE (100%) rename railties/lib/{generator/generators => generators/rails}/metal/metal_generator.rb (100%) rename railties/lib/{generator/generators => generators/rails}/metal/templates/metal.rb (100%) delete mode 100644 railties/test/generator/generator_test_helper.rb rename railties/test/{generator => generators}/actions_test.rb (98%) rename railties/test/{generator => generators}/app_test.rb (98%) create mode 100644 railties/test/rails_generator/generator_test_helper.rb rename railties/test/{generators => rails_generator}/rails_controller_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_helper_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_mailer_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_model_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_model_subclass_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_resource_generator_test.rb (100%) rename railties/test/{generators => rails_generator}/rails_scaffold_generator_test.rb (100%) diff --git a/railties/bin/gen b/railties/bin/gen index f054d4e853..6cc66ac455 100755 --- a/railties/bin/gen +++ b/railties/bin/gen @@ -14,16 +14,18 @@ else ARGV.size == 1 ARGV << "--help" end -require File.dirname(__FILE__) + '/../lib/generator' +require File.dirname(__FILE__) + '/../lib/generators' -Rails::Generators.builtin.each do |name| - require "generator/generators/#{name}/#{name}_generator" +Rails::Generators.builtin.each do |group, name| + require "generators/#{group}/#{name}/#{name}_generator" end name = ARGV.shift if klass = Thor::Util.find_by_namespace("rails:generators:#{name}") klass.start +elsif klass = Thor::Util.find_by_namespace(name) + klass.start else puts "Could not find generator #{name}." end diff --git a/railties/bin/rails b/railties/bin/rails index 57eb8809ed..538d0cbc84 100755 --- a/railties/bin/rails +++ b/railties/bin/rails @@ -9,7 +9,7 @@ end ARGV << "--help" if ARGV.empty? -require File.dirname(__FILE__) + '/../lib/generator' -require 'generator/generators/app/app_generator' +require File.dirname(__FILE__) + '/../lib/generators' +require 'generators/rails/app/app_generator' Rails::Generators::AppGenerator.start diff --git a/railties/lib/generator.rb b/railties/lib/generators.rb similarity index 72% rename from railties/lib/generator.rb rename to railties/lib/generators.rb index cc3a983d60..5d22ff5e62 100644 --- a/railties/lib/generator.rb +++ b/railties/lib/generators.rb @@ -10,15 +10,16 @@ require 'thor' $:.unshift(File.dirname(__FILE__)) require 'rails/version' unless defined?(Rails::VERSION) -require 'generator/base' -require 'generator/named_base' +require 'generators/base' +require 'generators/named_base' module Rails module Generators def self.builtin - Dir[File.dirname(__FILE__) + '/generator/generators/*'].collect do |file| - File.basename(file) + Dir[File.dirname(__FILE__) + '/generators/*/*'].collect do |file| + file.split('/')[-2, 2] end end end end + diff --git a/railties/lib/generator/actions.rb b/railties/lib/generators/actions.rb similarity index 100% rename from railties/lib/generator/actions.rb rename to railties/lib/generators/actions.rb diff --git a/railties/lib/generator/base.rb b/railties/lib/generators/base.rb similarity index 95% rename from railties/lib/generator/base.rb rename to railties/lib/generators/base.rb index 8e778e1d15..5f0b3eb369 100644 --- a/railties/lib/generator/base.rb +++ b/railties/lib/generators/base.rb @@ -1,4 +1,4 @@ -require 'generator/actions' +require 'generators/actions' module Rails module Generators @@ -12,7 +12,7 @@ module Rails # Automatically sets the source root based on the class name. # def self.source_root - @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'generators', generator_name, 'templates')) + @source_root ||= File.expand_path(File.join(File.dirname(__FILE__), 'rails', generator_name, 'templates')) end # Convenience method to get the namespace from the class name. diff --git a/railties/lib/generator/generated_attribute.rb b/railties/lib/generators/generated_attribute.rb similarity index 100% rename from railties/lib/generator/generated_attribute.rb rename to railties/lib/generators/generated_attribute.rb diff --git a/railties/lib/generator/named_base.rb b/railties/lib/generators/named_base.rb similarity index 97% rename from railties/lib/generator/named_base.rb rename to railties/lib/generators/named_base.rb index 6035d71060..223b34ce57 100644 --- a/railties/lib/generator/named_base.rb +++ b/railties/lib/generators/named_base.rb @@ -1,5 +1,5 @@ -require 'generator/base' -require 'generator/generated_attribute' +require 'generators/base' +require 'generators/generated_attribute' module Rails module Generators diff --git a/railties/lib/generator/generators/app/USAGE b/railties/lib/generators/rails/app/USAGE similarity index 100% rename from railties/lib/generator/generators/app/USAGE rename to railties/lib/generators/rails/app/USAGE diff --git a/railties/lib/generator/generators/app/app_generator.rb b/railties/lib/generators/rails/app/app_generator.rb similarity index 100% rename from railties/lib/generator/generators/app/app_generator.rb rename to railties/lib/generators/rails/app/app_generator.rb diff --git a/railties/lib/generator/generators/app/templates/README b/railties/lib/generators/rails/app/templates/README similarity index 100% rename from railties/lib/generator/generators/app/templates/README rename to railties/lib/generators/rails/app/templates/README diff --git a/railties/lib/generator/generators/app/templates/Rakefile b/railties/lib/generators/rails/app/templates/Rakefile similarity index 100% rename from railties/lib/generator/generators/app/templates/Rakefile rename to railties/lib/generators/rails/app/templates/Rakefile diff --git a/railties/lib/generator/generators/app/templates/app/controllers/application_controller.rb b/railties/lib/generators/rails/app/templates/app/controllers/application_controller.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/app/controllers/application_controller.rb rename to railties/lib/generators/rails/app/templates/app/controllers/application_controller.rb diff --git a/railties/lib/generator/generators/app/templates/app/helpers/application_helper.rb b/railties/lib/generators/rails/app/templates/app/helpers/application_helper.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/app/helpers/application_helper.rb rename to railties/lib/generators/rails/app/templates/app/helpers/application_helper.rb diff --git a/railties/lib/generator/generators/app/templates/app/models/.empty_directory b/railties/lib/generators/rails/app/templates/app/models/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/app/models/.empty_directory rename to railties/lib/generators/rails/app/templates/app/models/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/app/views/layouts/.empty_directory b/railties/lib/generators/rails/app/templates/app/views/layouts/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/app/views/layouts/.empty_directory rename to railties/lib/generators/rails/app/templates/app/views/layouts/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/config/boot.rb b/railties/lib/generators/rails/app/templates/config/boot.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/boot.rb rename to railties/lib/generators/rails/app/templates/config/boot.rb diff --git a/railties/lib/generator/generators/app/templates/config/databases/frontbase.yml b/railties/lib/generators/rails/app/templates/config/databases/frontbase.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/frontbase.yml rename to railties/lib/generators/rails/app/templates/config/databases/frontbase.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/ibm_db.yml b/railties/lib/generators/rails/app/templates/config/databases/ibm_db.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/ibm_db.yml rename to railties/lib/generators/rails/app/templates/config/databases/ibm_db.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/mysql.yml b/railties/lib/generators/rails/app/templates/config/databases/mysql.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/mysql.yml rename to railties/lib/generators/rails/app/templates/config/databases/mysql.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/oracle.yml b/railties/lib/generators/rails/app/templates/config/databases/oracle.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/oracle.yml rename to railties/lib/generators/rails/app/templates/config/databases/oracle.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/postgresql.yml b/railties/lib/generators/rails/app/templates/config/databases/postgresql.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/postgresql.yml rename to railties/lib/generators/rails/app/templates/config/databases/postgresql.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/sqlite2.yml b/railties/lib/generators/rails/app/templates/config/databases/sqlite2.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/sqlite2.yml rename to railties/lib/generators/rails/app/templates/config/databases/sqlite2.yml diff --git a/railties/lib/generator/generators/app/templates/config/databases/sqlite3.yml b/railties/lib/generators/rails/app/templates/config/databases/sqlite3.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/databases/sqlite3.yml rename to railties/lib/generators/rails/app/templates/config/databases/sqlite3.yml diff --git a/railties/lib/generator/generators/app/templates/config/environment.rb b/railties/lib/generators/rails/app/templates/config/environment.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/environment.rb rename to railties/lib/generators/rails/app/templates/config/environment.rb diff --git a/railties/lib/generator/generators/app/templates/config/environments/development.rb b/railties/lib/generators/rails/app/templates/config/environments/development.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/environments/development.rb rename to railties/lib/generators/rails/app/templates/config/environments/development.rb diff --git a/railties/lib/generator/generators/app/templates/config/environments/production.rb b/railties/lib/generators/rails/app/templates/config/environments/production.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/environments/production.rb rename to railties/lib/generators/rails/app/templates/config/environments/production.rb diff --git a/railties/lib/generator/generators/app/templates/config/environments/test.rb b/railties/lib/generators/rails/app/templates/config/environments/test.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/environments/test.rb rename to railties/lib/generators/rails/app/templates/config/environments/test.rb diff --git a/railties/lib/generator/generators/app/templates/config/initializers/backtrace_silencers.rb b/railties/lib/generators/rails/app/templates/config/initializers/backtrace_silencers.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/initializers/backtrace_silencers.rb rename to railties/lib/generators/rails/app/templates/config/initializers/backtrace_silencers.rb diff --git a/railties/lib/generator/generators/app/templates/config/initializers/inflections.rb b/railties/lib/generators/rails/app/templates/config/initializers/inflections.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/initializers/inflections.rb rename to railties/lib/generators/rails/app/templates/config/initializers/inflections.rb diff --git a/railties/lib/generator/generators/app/templates/config/initializers/mime_types.rb b/railties/lib/generators/rails/app/templates/config/initializers/mime_types.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/initializers/mime_types.rb rename to railties/lib/generators/rails/app/templates/config/initializers/mime_types.rb diff --git a/railties/lib/generator/generators/app/templates/config/initializers/new_rails_defaults.rb b/railties/lib/generators/rails/app/templates/config/initializers/new_rails_defaults.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/initializers/new_rails_defaults.rb rename to railties/lib/generators/rails/app/templates/config/initializers/new_rails_defaults.rb diff --git a/railties/lib/generator/generators/app/templates/config/initializers/session_store.rb.tt b/railties/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/config/initializers/session_store.rb.tt rename to railties/lib/generators/rails/app/templates/config/initializers/session_store.rb.tt diff --git a/railties/lib/generator/generators/app/templates/config/locales/en.yml b/railties/lib/generators/rails/app/templates/config/locales/en.yml similarity index 100% rename from railties/lib/generator/generators/app/templates/config/locales/en.yml rename to railties/lib/generators/rails/app/templates/config/locales/en.yml diff --git a/railties/lib/generator/generators/app/templates/config/routes.rb b/railties/lib/generators/rails/app/templates/config/routes.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/config/routes.rb rename to railties/lib/generators/rails/app/templates/config/routes.rb diff --git a/railties/lib/generator/generators/app/templates/db/seeds.rb b/railties/lib/generators/rails/app/templates/db/seeds.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/db/seeds.rb rename to railties/lib/generators/rails/app/templates/db/seeds.rb diff --git a/railties/lib/generator/generators/app/templates/dispatchers/config.ru b/railties/lib/generators/rails/app/templates/dispatchers/config.ru similarity index 100% rename from railties/lib/generator/generators/app/templates/dispatchers/config.ru rename to railties/lib/generators/rails/app/templates/dispatchers/config.ru diff --git a/railties/lib/generator/generators/app/templates/dispatchers/dispatch.fcgi b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi similarity index 100% rename from railties/lib/generator/generators/app/templates/dispatchers/dispatch.fcgi rename to railties/lib/generators/rails/app/templates/dispatchers/dispatch.fcgi diff --git a/railties/lib/generator/generators/app/templates/dispatchers/dispatch.rb b/railties/lib/generators/rails/app/templates/dispatchers/dispatch.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/dispatchers/dispatch.rb rename to railties/lib/generators/rails/app/templates/dispatchers/dispatch.rb diff --git a/railties/lib/generator/generators/app/templates/dispatchers/gateway.cgi b/railties/lib/generators/rails/app/templates/dispatchers/gateway.cgi similarity index 100% rename from railties/lib/generator/generators/app/templates/dispatchers/gateway.cgi rename to railties/lib/generators/rails/app/templates/dispatchers/gateway.cgi diff --git a/railties/lib/generator/generators/app/templates/doc/README_FOR_APP b/railties/lib/generators/rails/app/templates/doc/README_FOR_APP similarity index 100% rename from railties/lib/generator/generators/app/templates/doc/README_FOR_APP rename to railties/lib/generators/rails/app/templates/doc/README_FOR_APP diff --git a/railties/lib/generator/generators/app/templates/public/404.html b/railties/lib/generators/rails/app/templates/public/404.html similarity index 100% rename from railties/lib/generator/generators/app/templates/public/404.html rename to railties/lib/generators/rails/app/templates/public/404.html diff --git a/railties/lib/generator/generators/app/templates/public/422.html b/railties/lib/generators/rails/app/templates/public/422.html similarity index 100% rename from railties/lib/generator/generators/app/templates/public/422.html rename to railties/lib/generators/rails/app/templates/public/422.html diff --git a/railties/lib/generator/generators/app/templates/public/500.html b/railties/lib/generators/rails/app/templates/public/500.html similarity index 100% rename from railties/lib/generator/generators/app/templates/public/500.html rename to railties/lib/generators/rails/app/templates/public/500.html diff --git a/railties/lib/generator/generators/app/templates/public/favicon.ico b/railties/lib/generators/rails/app/templates/public/favicon.ico similarity index 100% rename from railties/lib/generator/generators/app/templates/public/favicon.ico rename to railties/lib/generators/rails/app/templates/public/favicon.ico diff --git a/railties/lib/generator/generators/app/templates/public/images/rails.png b/railties/lib/generators/rails/app/templates/public/images/rails.png similarity index 100% rename from railties/lib/generator/generators/app/templates/public/images/rails.png rename to railties/lib/generators/rails/app/templates/public/images/rails.png diff --git a/railties/lib/generator/generators/app/templates/public/index.html b/railties/lib/generators/rails/app/templates/public/index.html similarity index 100% rename from railties/lib/generator/generators/app/templates/public/index.html rename to railties/lib/generators/rails/app/templates/public/index.html diff --git a/railties/lib/generator/generators/app/templates/public/javascripts/application.js b/railties/lib/generators/rails/app/templates/public/javascripts/application.js similarity index 100% rename from railties/lib/generator/generators/app/templates/public/javascripts/application.js rename to railties/lib/generators/rails/app/templates/public/javascripts/application.js diff --git a/railties/lib/generator/generators/app/templates/public/javascripts/controls.js b/railties/lib/generators/rails/app/templates/public/javascripts/controls.js similarity index 100% rename from railties/lib/generator/generators/app/templates/public/javascripts/controls.js rename to railties/lib/generators/rails/app/templates/public/javascripts/controls.js diff --git a/railties/lib/generator/generators/app/templates/public/javascripts/dragdrop.js b/railties/lib/generators/rails/app/templates/public/javascripts/dragdrop.js similarity index 100% rename from railties/lib/generator/generators/app/templates/public/javascripts/dragdrop.js rename to railties/lib/generators/rails/app/templates/public/javascripts/dragdrop.js diff --git a/railties/lib/generator/generators/app/templates/public/javascripts/effects.js b/railties/lib/generators/rails/app/templates/public/javascripts/effects.js similarity index 100% rename from railties/lib/generator/generators/app/templates/public/javascripts/effects.js rename to railties/lib/generators/rails/app/templates/public/javascripts/effects.js diff --git a/railties/lib/generator/generators/app/templates/public/javascripts/prototype.js b/railties/lib/generators/rails/app/templates/public/javascripts/prototype.js similarity index 100% rename from railties/lib/generator/generators/app/templates/public/javascripts/prototype.js rename to railties/lib/generators/rails/app/templates/public/javascripts/prototype.js diff --git a/railties/lib/generator/generators/app/templates/public/robots.txt b/railties/lib/generators/rails/app/templates/public/robots.txt similarity index 100% rename from railties/lib/generator/generators/app/templates/public/robots.txt rename to railties/lib/generators/rails/app/templates/public/robots.txt diff --git a/railties/lib/generator/generators/app/templates/public/stylesheets/.empty_directory b/railties/lib/generators/rails/app/templates/public/stylesheets/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/public/stylesheets/.empty_directory rename to railties/lib/generators/rails/app/templates/public/stylesheets/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/script/about.tt b/railties/lib/generators/rails/app/templates/script/about.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/about.tt rename to railties/lib/generators/rails/app/templates/script/about.tt diff --git a/railties/lib/generator/generators/app/templates/script/console.tt b/railties/lib/generators/rails/app/templates/script/console.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/console.tt rename to railties/lib/generators/rails/app/templates/script/console.tt diff --git a/railties/lib/generator/generators/app/templates/script/dbconsole.tt b/railties/lib/generators/rails/app/templates/script/dbconsole.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/dbconsole.tt rename to railties/lib/generators/rails/app/templates/script/dbconsole.tt diff --git a/railties/lib/generator/generators/app/templates/script/destroy.tt b/railties/lib/generators/rails/app/templates/script/destroy.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/destroy.tt rename to railties/lib/generators/rails/app/templates/script/destroy.tt diff --git a/railties/lib/generator/generators/app/templates/script/generate.tt b/railties/lib/generators/rails/app/templates/script/generate.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/generate.tt rename to railties/lib/generators/rails/app/templates/script/generate.tt diff --git a/railties/lib/generator/generators/app/templates/script/performance/benchmarker.tt b/railties/lib/generators/rails/app/templates/script/performance/benchmarker.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/performance/benchmarker.tt rename to railties/lib/generators/rails/app/templates/script/performance/benchmarker.tt diff --git a/railties/lib/generator/generators/app/templates/script/performance/profiler.tt b/railties/lib/generators/rails/app/templates/script/performance/profiler.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/performance/profiler.tt rename to railties/lib/generators/rails/app/templates/script/performance/profiler.tt diff --git a/railties/lib/generator/generators/app/templates/script/plugin.tt b/railties/lib/generators/rails/app/templates/script/plugin.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/plugin.tt rename to railties/lib/generators/rails/app/templates/script/plugin.tt diff --git a/railties/lib/generator/generators/app/templates/script/runner.tt b/railties/lib/generators/rails/app/templates/script/runner.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/runner.tt rename to railties/lib/generators/rails/app/templates/script/runner.tt diff --git a/railties/lib/generator/generators/app/templates/script/server.tt b/railties/lib/generators/rails/app/templates/script/server.tt similarity index 100% rename from railties/lib/generator/generators/app/templates/script/server.tt rename to railties/lib/generators/rails/app/templates/script/server.tt diff --git a/railties/lib/generator/generators/app/templates/test/fixtures/.empty_directory b/railties/lib/generators/rails/app/templates/test/fixtures/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/test/fixtures/.empty_directory rename to railties/lib/generators/rails/app/templates/test/fixtures/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/test/functional/.empty_directory b/railties/lib/generators/rails/app/templates/test/functional/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/test/functional/.empty_directory rename to railties/lib/generators/rails/app/templates/test/functional/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/test/integration/.empty_directory b/railties/lib/generators/rails/app/templates/test/integration/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/test/integration/.empty_directory rename to railties/lib/generators/rails/app/templates/test/integration/.empty_directory diff --git a/railties/lib/generator/generators/app/templates/test/performance/performance_test.rb b/railties/lib/generators/rails/app/templates/test/performance/performance_test.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/test/performance/performance_test.rb rename to railties/lib/generators/rails/app/templates/test/performance/performance_test.rb diff --git a/railties/lib/generator/generators/app/templates/test/test_helper.rb b/railties/lib/generators/rails/app/templates/test/test_helper.rb similarity index 100% rename from railties/lib/generator/generators/app/templates/test/test_helper.rb rename to railties/lib/generators/rails/app/templates/test/test_helper.rb diff --git a/railties/lib/generator/generators/app/templates/test/unit/.empty_directory b/railties/lib/generators/rails/app/templates/test/unit/.empty_directory similarity index 100% rename from railties/lib/generator/generators/app/templates/test/unit/.empty_directory rename to railties/lib/generators/rails/app/templates/test/unit/.empty_directory diff --git a/railties/lib/generator/generators/metal/USAGE b/railties/lib/generators/rails/metal/USAGE similarity index 100% rename from railties/lib/generator/generators/metal/USAGE rename to railties/lib/generators/rails/metal/USAGE diff --git a/railties/lib/generator/generators/metal/metal_generator.rb b/railties/lib/generators/rails/metal/metal_generator.rb similarity index 100% rename from railties/lib/generator/generators/metal/metal_generator.rb rename to railties/lib/generators/rails/metal/metal_generator.rb diff --git a/railties/lib/generator/generators/metal/templates/metal.rb b/railties/lib/generators/rails/metal/templates/metal.rb similarity index 100% rename from railties/lib/generator/generators/metal/templates/metal.rb rename to railties/lib/generators/rails/metal/templates/metal.rb diff --git a/railties/test/generator/generator_test_helper.rb b/railties/test/generator/generator_test_helper.rb deleted file mode 100644 index ebd3547e5e..0000000000 --- a/railties/test/generator/generator_test_helper.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'test/unit' -require 'fileutils' - -$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" - -# For this while, let's load all generators by hand -require 'generator/generators/app/app_generator' - -class GeneratorTestCase < Test::Unit::TestCase - include FileUtils - - def destination_root - @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") - end - - def setup - mkdir_p(destination_root) - rm_rf(destination_root) - end - - def test_truth - # don't complain, test/unit - end - - def capture(stream) - begin - stream = stream.to_s - eval "$#{stream} = StringIO.new" - yield - result = eval("$#{stream}").string - ensure - eval("$#{stream} = #{stream.upcase}") - end - - result - end - alias :silence :capture - - def assert_file(relative, content=nil) - absolute = File.join(destination_root, relative) - assert File.exists?(absolute) - - case content - when String - assert_equal content, File.read(absolute) - when Regexp - assert_match content, File.read(absolute) - end - end - - def assert_no_file(relative, content=nil) - absolute = File.join(destination_root, relative) - assert !File.exists?(absolute) - end -end diff --git a/railties/test/generator/actions_test.rb b/railties/test/generators/actions_test.rb similarity index 98% rename from railties/test/generator/actions_test.rb rename to railties/test/generators/actions_test.rb index 60db8905d7..6030504fa3 100644 --- a/railties/test/generator/actions_test.rb +++ b/railties/test/generators/actions_test.rb @@ -1,5 +1,5 @@ require 'abstract_unit' -require 'generator/generator_test_helper' +require 'generators/generator_test_helper' class ActionsTest < GeneratorTestCase def setup @@ -170,7 +170,7 @@ class ActionsTest < GeneratorTestCase protected def run_generator - silence(:stdout) { Rails::Generators::App.start [destination_root] } + silence(:stdout) { Rails::Generators::AppGenerator.start [destination_root] } end def generator(config={}) diff --git a/railties/test/generator/app_test.rb b/railties/test/generators/app_test.rb similarity index 98% rename from railties/test/generator/app_test.rb rename to railties/test/generators/app_test.rb index af1be03e59..a67f7e4926 100644 --- a/railties/test/generator/app_test.rb +++ b/railties/test/generators/app_test.rb @@ -1,5 +1,5 @@ require 'abstract_unit' -require 'generator/generator_test_helper' +require 'generators/generator_test_helper' class AppTest < GeneratorTestCase diff --git a/railties/test/generators/generator_test_helper.rb b/railties/test/generators/generator_test_helper.rb index 01bf1c90bd..2b988bde7a 100644 --- a/railties/test/generators/generator_test_helper.rb +++ b/railties/test/generators/generator_test_helper.rb @@ -1,303 +1,56 @@ require 'test/unit' require 'fileutils' -# Mock out what we need from AR::Base -module ActiveRecord - class Base - class << self - attr_accessor :pluralize_table_names, :timestamped_migrations - end - self.pluralize_table_names = true - self.timestamped_migrations = true - end - - module ConnectionAdapters - class Column - attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale - - def initialize(name, default, sql_type = nil) - @name = name - @default = default - @type = @sql_type = sql_type - end - - def human_name - @name.humanize - end - end - end -end - -# Mock up necessities from ActionView -module ActionView - module Helpers - module ActionRecordHelper; end - class InstanceTag; end - end -end - -# Set RAILS_ROOT appropriately fixture generation -tmp_dir = "#{File.dirname(__FILE__)}/../fixtures/tmp" - -if defined? RAILS_ROOT - RAILS_ROOT.replace tmp_dir -else - RAILS_ROOT = tmp_dir -end -FileUtils.mkdir_p RAILS_ROOT - $LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" -require 'initializer' -# Mocks out the configuration -module Rails - def self.configuration - Rails::Configuration.new - end -end - -require 'rails_generator' +# For this while, let's load all generators by hand +require 'generators' +require 'generators/rails/app/app_generator' class GeneratorTestCase < Test::Unit::TestCase include FileUtils - def setup - ActiveRecord::Base.pluralize_table_names = true - - mkdir_p "#{RAILS_ROOT}/app/views/layouts" - mkdir_p "#{RAILS_ROOT}/config" - mkdir_p "#{RAILS_ROOT}/db" - mkdir_p "#{RAILS_ROOT}/test/fixtures" - mkdir_p "#{RAILS_ROOT}/public/stylesheets" - - File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f| - f << "ActionController::Routing::Routes.draw do |map|\n\nend" - end + def destination_root + @destination_root ||= File.expand_path("#{File.dirname(__FILE__)}/../fixtures/tmp") end - def teardown - rm_rf "#{RAILS_ROOT}/app" - rm_rf "#{RAILS_ROOT}/test" - rm_rf "#{RAILS_ROOT}/config" - rm_rf "#{RAILS_ROOT}/db" - rm_rf "#{RAILS_ROOT}/public" + def setup + mkdir_p(destination_root) + rm_rf(destination_root) end def test_truth # don't complain, test/unit end - # Instantiates the Generator. - def build_generator(name, params) - Rails::Generator::Base.instance(name, params) - end + def capture(stream) + begin + stream = stream.to_s + eval "$#{stream} = StringIO.new" + yield + result = eval("$#{stream}").string + ensure + eval("$#{stream} = #{stream.upcase}") + end - # Runs the +create+ command (like the command line does). - def run_generator(name, params) - silence_generator do - build_generator(name, params).command(:create).invoke! + result + end + alias :silence :capture + + def assert_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert File.exists?(absolute) + + case content + when String + assert_equal content, File.read(absolute) + when Regexp + assert_match content, File.read(absolute) end end - # Silences the logger temporarily and returns the output as a String. - def silence_generator - logger_original = Rails::Generator::Base.logger - myout = StringIO.new - Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new(myout) - yield if block_given? - Rails::Generator::Base.logger = logger_original - myout.string - end - - # Asserts that the given controller was generated. - # It takes a name or symbol without the _controller part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_controller_for(name, parent = "ApplicationController") - assert_generated_class "app/controllers/#{name.to_s.underscore}_controller", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given model was generated. - # It takes a name or symbol and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_model_for(name, parent = "ActiveRecord::Base") - assert_generated_class "app/models/#{name.to_s.underscore}", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper was generated. - # It takes a name or symbol without the _helper part. - # The contents of the module source file is passed to a block. - def assert_generated_helper_for(name) - assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body| - yield body if block_given? - end - end - - # Asserts that the given functional test was generated. - # It takes a name or symbol without the _controller_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_functional_test_for(name, parent = "ActionController::TestCase") - assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body| - yield body if block_given? - end - end - - # Asserts that the given helper test test was generated. - # It takes a name or symbol without the _helper_test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_helper_test_for(name, parent = "ActionView::TestCase") - path = "test/unit/helpers/#{name.to_s.underscore}_helper_test" - # Have to pass the path without the "test/" part so that class_name_from_path will return a correct result - class_name = class_name_from_path(path.gsub(/^test\//, '')) - - assert_generated_class path,parent,class_name do |body| - yield body if block_given? - end - end - - # Asserts that the given unit test was generated. - # It takes a name or symbol without the _test part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_unit_test_for(name, parent = "ActiveSupport::TestCase") - assert_generated_class "test/unit/#{name.to_s.underscore}_test", parent do |body| - yield body if block_given? - end - end - - # Asserts that the given file was generated. - # The contents of the file is passed to a block. - def assert_generated_file(path) - assert_file_exists(path) - File.open("#{RAILS_ROOT}/#{path}") do |f| - yield f.read if block_given? - end - end - - # asserts that the given file exists - def assert_file_exists(path) - assert File.exist?("#{RAILS_ROOT}/#{path}"), - "The file '#{RAILS_ROOT}/#{path}' should exist" - end - - # Asserts that the given class source file was generated. - # It takes a path without the .rb part and an optional super class. - # The contents of the class source file is passed to a block. - def assert_generated_class(path, parent = nil, class_name = class_name_from_path(path)) - assert_generated_file("#{path}.rb") do |body| - assert_match /class #{class_name}#{parent.nil? ? '':" < #{parent}"}/, body, "the file '#{path}.rb' should be a class" - yield body if block_given? - end - end - - def class_name_from_path(path) - # FIXME: Sucky way to detect namespaced classes - if path.split('/').size > 3 - path =~ /\/?(\d+_)?(\w+)\/(\w+)$/ - "#{$2.camelize}::#{$3.camelize}" - else - path =~ /\/?(\d+_)?(\w+)$/ - $2.camelize - end - end - - # Asserts that the given module source file was generated. - # It takes a path without the .rb part. - # The contents of the class source file is passed to a block. - def assert_generated_module(path) - # FIXME: Sucky way to detect namespaced modules - if path.split('/').size > 3 - path =~ /\/?(\w+)\/(\w+)$/ - module_name = "#{$1.camelize}::#{$2.camelize}" - else - path =~ /\/?(\w+)$/ - module_name = $1.camelize - end - - assert_generated_file("#{path}.rb") do |body| - assert_match /module #{module_name}/, body, "the file '#{path}.rb' should be a module" - yield body if block_given? - end - end - - # Asserts that the given CSS stylesheet file was generated. - # It takes a path without the .css part. - # The contents of the stylesheet source file is passed to a block. - def assert_generated_stylesheet(path) - assert_generated_file("public/stylesheets/#{path}.css") do |body| - yield body if block_given? - end - end - - # Asserts that the given YAML file was generated. - # It takes a path without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_yaml(path) - assert_generated_file("#{path}.yml") do |body| - yaml = YAML.load(body) - assert yaml, 'YAML data missing' - yield yaml if block_given? - end - end - - # Asserts that the given fixtures YAML file was generated. - # It takes a fixture name without the .yml part. - # The parsed YAML tree is passed to a block. - def assert_generated_fixtures_for(name) - assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml| - yield yaml if block_given? - end - end - - # Asserts that the given views were generated. - # It takes a controller name and a list of views (including extensions). - # The body of each view is passed to a block. - def assert_generated_views_for(name, *actions) - actions.each do |action| - assert_generated_file("app/views/#{name.to_s.underscore}/#{action}") do |body| - yield body if block_given? - end - end - end - - def assert_generated_migration(name, parent = "ActiveRecord::Migration") - file = Dir.glob("#{RAILS_ROOT}/db/migrate/*_#{name.to_s.underscore}.rb").first - file = file.match(/db\/migrate\/[0-9]+_\w+/).to_s - assert_generated_class file, parent do |body| - assert_match /timestamps/, body, "should have timestamps defined" - yield body if block_given? - end - end - - # Asserts that the given migration file was not generated. - # It takes the name of the migration as a parameter. - def assert_skipped_migration(name) - migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb" - assert !File.exist?(migration_file), "should not create migration #{migration_file}" - end - - # Asserts that the given resource was added to the routes. - def assert_added_route_for(name) - assert_generated_file("config/routes.rb") do |body| - assert_match /map.resources :#{name.to_s.underscore}/, body, - "should add route for :#{name.to_s.underscore}" - end - end - - # Asserts that the given methods are defined in the body. - # This does assume standard rails code conventions with regards to the source code. - # The body of each individual method is passed to a block. - def assert_has_method(body, *methods) - methods.each do |name| - assert body =~ /^ def #{name}(\(.+\))?\n((\n| .*\n)*) end/, "should have method #{name}" - yield(name, $2) if block_given? - end - end - - # Asserts that the given column is defined in the migration. - def assert_generated_column(body, name, type) - assert_match /t\.#{type.to_s} :#{name.to_s}/, body, "should have column #{name.to_s} defined" + def assert_no_file(relative, content=nil) + absolute = File.join(destination_root, relative) + assert !File.exists?(absolute) end end diff --git a/railties/test/rails_generator/generator_test_helper.rb b/railties/test/rails_generator/generator_test_helper.rb new file mode 100644 index 0000000000..01bf1c90bd --- /dev/null +++ b/railties/test/rails_generator/generator_test_helper.rb @@ -0,0 +1,303 @@ +require 'test/unit' +require 'fileutils' + +# Mock out what we need from AR::Base +module ActiveRecord + class Base + class << self + attr_accessor :pluralize_table_names, :timestamped_migrations + end + self.pluralize_table_names = true + self.timestamped_migrations = true + end + + module ConnectionAdapters + class Column + attr_reader :name, :default, :type, :limit, :null, :sql_type, :precision, :scale + + def initialize(name, default, sql_type = nil) + @name = name + @default = default + @type = @sql_type = sql_type + end + + def human_name + @name.humanize + end + end + end +end + +# Mock up necessities from ActionView +module ActionView + module Helpers + module ActionRecordHelper; end + class InstanceTag; end + end +end + +# Set RAILS_ROOT appropriately fixture generation +tmp_dir = "#{File.dirname(__FILE__)}/../fixtures/tmp" + +if defined? RAILS_ROOT + RAILS_ROOT.replace tmp_dir +else + RAILS_ROOT = tmp_dir +end +FileUtils.mkdir_p RAILS_ROOT + +$LOAD_PATH.unshift "#{File.dirname(__FILE__)}/../../lib" +require 'initializer' + +# Mocks out the configuration +module Rails + def self.configuration + Rails::Configuration.new + end +end + +require 'rails_generator' + +class GeneratorTestCase < Test::Unit::TestCase + include FileUtils + + def setup + ActiveRecord::Base.pluralize_table_names = true + + mkdir_p "#{RAILS_ROOT}/app/views/layouts" + mkdir_p "#{RAILS_ROOT}/config" + mkdir_p "#{RAILS_ROOT}/db" + mkdir_p "#{RAILS_ROOT}/test/fixtures" + mkdir_p "#{RAILS_ROOT}/public/stylesheets" + + File.open("#{RAILS_ROOT}/config/routes.rb", 'w') do |f| + f << "ActionController::Routing::Routes.draw do |map|\n\nend" + end + end + + def teardown + rm_rf "#{RAILS_ROOT}/app" + rm_rf "#{RAILS_ROOT}/test" + rm_rf "#{RAILS_ROOT}/config" + rm_rf "#{RAILS_ROOT}/db" + rm_rf "#{RAILS_ROOT}/public" + end + + def test_truth + # don't complain, test/unit + end + + # Instantiates the Generator. + def build_generator(name, params) + Rails::Generator::Base.instance(name, params) + end + + # Runs the +create+ command (like the command line does). + def run_generator(name, params) + silence_generator do + build_generator(name, params).command(:create).invoke! + end + end + + # Silences the logger temporarily and returns the output as a String. + def silence_generator + logger_original = Rails::Generator::Base.logger + myout = StringIO.new + Rails::Generator::Base.logger = Rails::Generator::SimpleLogger.new(myout) + yield if block_given? + Rails::Generator::Base.logger = logger_original + myout.string + end + + # Asserts that the given controller was generated. + # It takes a name or symbol without the _controller part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_controller_for(name, parent = "ApplicationController") + assert_generated_class "app/controllers/#{name.to_s.underscore}_controller", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given model was generated. + # It takes a name or symbol and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_model_for(name, parent = "ActiveRecord::Base") + assert_generated_class "app/models/#{name.to_s.underscore}", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given helper was generated. + # It takes a name or symbol without the _helper part. + # The contents of the module source file is passed to a block. + def assert_generated_helper_for(name) + assert_generated_module "app/helpers/#{name.to_s.underscore}_helper" do |body| + yield body if block_given? + end + end + + # Asserts that the given functional test was generated. + # It takes a name or symbol without the _controller_test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_functional_test_for(name, parent = "ActionController::TestCase") + assert_generated_class "test/functional/#{name.to_s.underscore}_controller_test",parent do |body| + yield body if block_given? + end + end + + # Asserts that the given helper test test was generated. + # It takes a name or symbol without the _helper_test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_helper_test_for(name, parent = "ActionView::TestCase") + path = "test/unit/helpers/#{name.to_s.underscore}_helper_test" + # Have to pass the path without the "test/" part so that class_name_from_path will return a correct result + class_name = class_name_from_path(path.gsub(/^test\//, '')) + + assert_generated_class path,parent,class_name do |body| + yield body if block_given? + end + end + + # Asserts that the given unit test was generated. + # It takes a name or symbol without the _test part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_unit_test_for(name, parent = "ActiveSupport::TestCase") + assert_generated_class "test/unit/#{name.to_s.underscore}_test", parent do |body| + yield body if block_given? + end + end + + # Asserts that the given file was generated. + # The contents of the file is passed to a block. + def assert_generated_file(path) + assert_file_exists(path) + File.open("#{RAILS_ROOT}/#{path}") do |f| + yield f.read if block_given? + end + end + + # asserts that the given file exists + def assert_file_exists(path) + assert File.exist?("#{RAILS_ROOT}/#{path}"), + "The file '#{RAILS_ROOT}/#{path}' should exist" + end + + # Asserts that the given class source file was generated. + # It takes a path without the .rb part and an optional super class. + # The contents of the class source file is passed to a block. + def assert_generated_class(path, parent = nil, class_name = class_name_from_path(path)) + assert_generated_file("#{path}.rb") do |body| + assert_match /class #{class_name}#{parent.nil? ? '':" < #{parent}"}/, body, "the file '#{path}.rb' should be a class" + yield body if block_given? + end + end + + def class_name_from_path(path) + # FIXME: Sucky way to detect namespaced classes + if path.split('/').size > 3 + path =~ /\/?(\d+_)?(\w+)\/(\w+)$/ + "#{$2.camelize}::#{$3.camelize}" + else + path =~ /\/?(\d+_)?(\w+)$/ + $2.camelize + end + end + + # Asserts that the given module source file was generated. + # It takes a path without the .rb part. + # The contents of the class source file is passed to a block. + def assert_generated_module(path) + # FIXME: Sucky way to detect namespaced modules + if path.split('/').size > 3 + path =~ /\/?(\w+)\/(\w+)$/ + module_name = "#{$1.camelize}::#{$2.camelize}" + else + path =~ /\/?(\w+)$/ + module_name = $1.camelize + end + + assert_generated_file("#{path}.rb") do |body| + assert_match /module #{module_name}/, body, "the file '#{path}.rb' should be a module" + yield body if block_given? + end + end + + # Asserts that the given CSS stylesheet file was generated. + # It takes a path without the .css part. + # The contents of the stylesheet source file is passed to a block. + def assert_generated_stylesheet(path) + assert_generated_file("public/stylesheets/#{path}.css") do |body| + yield body if block_given? + end + end + + # Asserts that the given YAML file was generated. + # It takes a path without the .yml part. + # The parsed YAML tree is passed to a block. + def assert_generated_yaml(path) + assert_generated_file("#{path}.yml") do |body| + yaml = YAML.load(body) + assert yaml, 'YAML data missing' + yield yaml if block_given? + end + end + + # Asserts that the given fixtures YAML file was generated. + # It takes a fixture name without the .yml part. + # The parsed YAML tree is passed to a block. + def assert_generated_fixtures_for(name) + assert_generated_yaml "test/fixtures/#{name.to_s.underscore}" do |yaml| + yield yaml if block_given? + end + end + + # Asserts that the given views were generated. + # It takes a controller name and a list of views (including extensions). + # The body of each view is passed to a block. + def assert_generated_views_for(name, *actions) + actions.each do |action| + assert_generated_file("app/views/#{name.to_s.underscore}/#{action}") do |body| + yield body if block_given? + end + end + end + + def assert_generated_migration(name, parent = "ActiveRecord::Migration") + file = Dir.glob("#{RAILS_ROOT}/db/migrate/*_#{name.to_s.underscore}.rb").first + file = file.match(/db\/migrate\/[0-9]+_\w+/).to_s + assert_generated_class file, parent do |body| + assert_match /timestamps/, body, "should have timestamps defined" + yield body if block_given? + end + end + + # Asserts that the given migration file was not generated. + # It takes the name of the migration as a parameter. + def assert_skipped_migration(name) + migration_file = "#{RAILS_ROOT}/db/migrate/001_#{name.to_s.underscore}.rb" + assert !File.exist?(migration_file), "should not create migration #{migration_file}" + end + + # Asserts that the given resource was added to the routes. + def assert_added_route_for(name) + assert_generated_file("config/routes.rb") do |body| + assert_match /map.resources :#{name.to_s.underscore}/, body, + "should add route for :#{name.to_s.underscore}" + end + end + + # Asserts that the given methods are defined in the body. + # This does assume standard rails code conventions with regards to the source code. + # The body of each individual method is passed to a block. + def assert_has_method(body, *methods) + methods.each do |name| + assert body =~ /^ def #{name}(\(.+\))?\n((\n| .*\n)*) end/, "should have method #{name}" + yield(name, $2) if block_given? + end + end + + # Asserts that the given column is defined in the migration. + def assert_generated_column(body, name, type) + assert_match /t\.#{type.to_s} :#{name.to_s}/, body, "should have column #{name.to_s} defined" + end +end diff --git a/railties/test/generators/rails_controller_generator_test.rb b/railties/test/rails_generator/rails_controller_generator_test.rb similarity index 100% rename from railties/test/generators/rails_controller_generator_test.rb rename to railties/test/rails_generator/rails_controller_generator_test.rb diff --git a/railties/test/generators/rails_helper_generator_test.rb b/railties/test/rails_generator/rails_helper_generator_test.rb similarity index 100% rename from railties/test/generators/rails_helper_generator_test.rb rename to railties/test/rails_generator/rails_helper_generator_test.rb diff --git a/railties/test/generators/rails_mailer_generator_test.rb b/railties/test/rails_generator/rails_mailer_generator_test.rb similarity index 100% rename from railties/test/generators/rails_mailer_generator_test.rb rename to railties/test/rails_generator/rails_mailer_generator_test.rb diff --git a/railties/test/generators/rails_model_generator_test.rb b/railties/test/rails_generator/rails_model_generator_test.rb similarity index 100% rename from railties/test/generators/rails_model_generator_test.rb rename to railties/test/rails_generator/rails_model_generator_test.rb diff --git a/railties/test/generators/rails_model_subclass_generator_test.rb b/railties/test/rails_generator/rails_model_subclass_generator_test.rb similarity index 100% rename from railties/test/generators/rails_model_subclass_generator_test.rb rename to railties/test/rails_generator/rails_model_subclass_generator_test.rb diff --git a/railties/test/generators/rails_resource_generator_test.rb b/railties/test/rails_generator/rails_resource_generator_test.rb similarity index 100% rename from railties/test/generators/rails_resource_generator_test.rb rename to railties/test/rails_generator/rails_resource_generator_test.rb diff --git a/railties/test/generators/rails_scaffold_generator_test.rb b/railties/test/rails_generator/rails_scaffold_generator_test.rb similarity index 100% rename from railties/test/generators/rails_scaffold_generator_test.rb rename to railties/test/rails_generator/rails_scaffold_generator_test.rb