aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2009-07-01 12:07:05 +0200
committerJosé Valim <jose.valim@gmail.com>2009-07-02 10:27:39 +0200
commit555a956a66628f0c14440e350fefe62125067058 (patch)
treeab3aa5b1b0b6bb0f6ab3564f16256885d6f402a1
parent10a9205c583a95ef35704aca93079b1700dd35f8 (diff)
downloadrails-555a956a66628f0c14440e350fefe62125067058.tar.gz
rails-555a956a66628f0c14440e350fefe62125067058.tar.bz2
rails-555a956a66628f0c14440e350fefe62125067058.zip
Ensure both migration and routes are removed on revoke.
-rw-r--r--railties/lib/generators/migration.rb8
-rw-r--r--railties/test/generators/model_generator_test.rb22
-rw-r--r--railties/test/generators/resource_generator_test.rb13
3 files changed, 36 insertions, 7 deletions
diff --git a/railties/lib/generators/migration.rb b/railties/lib/generators/migration.rb
index 1981ea6a59..2eb7c0a964 100644
--- a/railties/lib/generators/migration.rb
+++ b/railties/lib/generators/migration.rb
@@ -25,11 +25,13 @@ module Rails
@migration_file_name = File.basename(destination).sub(/\.rb$/, '')
@migration_class_name = @migration_file_name.camelize
- if existing = migration_exists?(migration_dir, @migration_file_name)
- raise Rails::Generators::Error, "Another migration is already named #{@migration_file_name}: #{existing}"
+ destination = migration_exists?(migration_dir, @migration_file_name)
+
+ if behavior == :invoke
+ raise Error, "Another migration is already named #{@migration_file_name}: #{destination}" if destination
+ destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb")
end
- destination = File.join(migration_dir, "#{@migration_number}_#{@migration_file_name}.rb")
template(source, destination, log_status)
end
diff --git a/railties/test/generators/model_generator_test.rb b/railties/test/generators/model_generator_test.rb
index 14cafe7b0d..c0768bba7b 100644
--- a/railties/test/generators/model_generator_test.rb
+++ b/railties/test/generators/model_generator_test.rb
@@ -79,6 +79,24 @@ class ModelGeneratorTest < GeneratorsTestCase
end
end
+ def test_migration_already_exists_error_message
+ run_generator
+ error = capture(:stderr){ run_generator ["Account"], :behavior => :skip }
+ assert_match /Another migration is already named create_accounts/, error
+ end
+
+ def test_migration_error_is_not_shown_on_revoke
+ run_generator
+ error = capture(:stderr){ run_generator ["Account"], :behavior => :revoke }
+ assert_no_match /Another migration is already named create_accounts/, error
+ end
+
+ def test_migration_is_removed_on_revoke
+ run_generator
+ run_generator ["Account"], :behavior => :revoke
+ assert_no_migration "db/migrate/create_accounts.rb"
+ end
+
def test_invokes_default_test_framework
run_generator
assert_file "test/unit/account_test.rb", /class AccountTest < ActiveSupport::TestCase/
@@ -103,8 +121,8 @@ class ModelGeneratorTest < GeneratorsTestCase
protected
- def run_generator(args=["Account", "name:string", "age:integer"])
- silence(:stdout) { Rails::Generators::ModelGenerator.start args, :root => destination_root }
+ def run_generator(args=["Account", "name:string", "age:integer"], config={})
+ silence(:stdout) { Rails::Generators::ModelGenerator.start args, config.merge(:root => destination_root) }
end
end
diff --git a/railties/test/generators/resource_generator_test.rb b/railties/test/generators/resource_generator_test.rb
index 53e9a1e817..a4cbb1894e 100644
--- a/railties/test/generators/resource_generator_test.rb
+++ b/railties/test/generators/resource_generator_test.rb
@@ -100,10 +100,19 @@ class ResourceGeneratorTest < GeneratorsTestCase
assert_no_match /Plural version of the model detected/, content
end
+ def test_route_is_removed_on_revoke
+ run_generator
+ run_generator ["account"], :behavior => :revoke
+
+ assert_file "config/routes.rb" do |route|
+ assert_no_match /map\.resources :accounts$/, route
+ end
+ end
+
protected
- def run_generator(args=["account"])
- silence(:stdout) { Rails::Generators::ResourceGenerator.start args, :root => destination_root }
+ def run_generator(args=["account"], config={})
+ silence(:stdout) { Rails::Generators::ResourceGenerator.start args, config.merge(:root => destination_root) }
end
end