1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Merge pull request #1857 from vijaydev/irreversible-migration

IrreversibleMigration is not raised when a method not supported by reversible migrations is called in the change method of a migration
This commit is contained in:
Aaron Patterson 2011-06-28 12:05:19 -07:00
commit 941d5c1f40
2 changed files with 9 additions and 7 deletions

View file

@ -93,11 +93,11 @@ module ActiveRecord
[:remove_timestamps, args]
end
# Forwards any missing method call to the \target.
# Record all the methods called in the +change+ method of a migration.
# This will ensure that IrreversibleMigration is raised when the corresponding
# invert_method does not exist while the migration is rolled back.
def method_missing(method, *args, &block)
@delegate.send(method, *args, &block)
rescue NoMethodError => e
raise e, e.message.sub(/ for #<.*$/, " via proxy for #{@delegate}")
record(method, args)
end
end

View file

@ -14,9 +14,11 @@ module ActiveRecord
assert recorder.respond_to?(:america)
end
def test_send_calls_super
assert_raises(NoMethodError) do
@recorder.send(:non_existing_method, :horses)
def test_non_existing_method_records_and_raises_on_inversion
@recorder.send(:non_existing_method, :horses)
assert_equal 1, @recorder.commands.length
assert_raises(ActiveRecord::IrreversibleMigration) do
@recorder.inverse
end
end