diff options
-rw-r--r-- | activerecord/lib/active_record/migration/command_recorder.rb | 6 | ||||
-rw-r--r-- | activerecord/test/cases/migration/command_recorder_test.rb | 7 |
2 files changed, 11 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/migration/command_recorder.rb b/activerecord/lib/active_record/migration/command_recorder.rb index d06e050db3..4a01313c61 100644 --- a/activerecord/lib/active_record/migration/command_recorder.rb +++ b/activerecord/lib/active_record/migration/command_recorder.rb @@ -97,7 +97,11 @@ module ActiveRecord # 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) - record(method, args) + if delegate.respond_to?(method) + delegate.send(method, *args, &block) + else + record(method, args) + end end end diff --git a/activerecord/test/cases/migration/command_recorder_test.rb b/activerecord/test/cases/migration/command_recorder_test.rb index a03c80bf93..85d38fac25 100644 --- a/activerecord/test/cases/migration/command_recorder_test.rb +++ b/activerecord/test/cases/migration/command_recorder_test.rb @@ -31,7 +31,12 @@ module ActiveRecord assert_equal [[:create_table, [:horses]]], recorder.commands end - def test_unknown_commands_raise_exception + def test_unknown_commands_delegate + recorder = CommandRecorder.new(stub(:foo => 'bar')) + assert_equal 'bar', recorder.foo + end + + def test_unknown_commands_raise_exception_if_they_cannot_delegate @recorder.record :execute, ['some sql'] assert_raises(ActiveRecord::IrreversibleMigration) do @recorder.inverse |