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:
commit
941d5c1f40
2 changed files with 9 additions and 7 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue