From 4d256bc6b1e6ae62c78d0ff3ca17480a53e00436 Mon Sep 17 00:00:00 2001 From: Jon Leighton Date: Thu, 30 Jun 2011 00:47:35 +0100 Subject: [PATCH] CommandRecorder should delegate in method_missing where possible. Fixes some tests in migration_test.rb under mysql. The problem was introduced in c278a2c5e109204ec8a47fcbfdfc327aad7996ce. --- .../lib/active_record/migration/command_recorder.rb | 6 +++++- 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