From ae2712c998a69a6565ecaafd575683a52808ff16 Mon Sep 17 00:00:00 2001 From: "M.Shibuya" Date: Wed, 3 Mar 2021 18:31:12 +0900 Subject: [PATCH] Fix AbstractObject's proxying was incompatible with keyword arguments in Ruby 3.0 Fixes #3342 --- .../adapters/active_record/abstract_object.rb | 10 ++++++++-- .../adapters/active_record/abstract_object_spec.rb | 8 ++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/rails_admin/adapters/active_record/abstract_object.rb b/lib/rails_admin/adapters/active_record/abstract_object.rb index c8f4db5b23..cd9a98cbc0 100644 --- a/lib/rails_admin/adapters/active_record/abstract_object.rb +++ b/lib/rails_admin/adapters/active_record/abstract_object.rb @@ -23,8 +23,14 @@ def save(options = {validate: true}) object.save(**options) end - def method_missing(method_name, *args, &block) - object.send(method_name, *args, &block) + if RUBY_VERSION >= '2.7' + def method_missing(method_name, *args, **kwargs, &block) + object.send(method_name, *args, **kwargs, &block) + end + else + def method_missing(method_name, *args, &block) + object.send(method_name, *args, &block) + end end end end diff --git a/spec/rails_admin/adapters/active_record/abstract_object_spec.rb b/spec/rails_admin/adapters/active_record/abstract_object_spec.rb index 5c859cc8da..ebf9300769 100644 --- a/spec/rails_admin/adapters/active_record/abstract_object_spec.rb +++ b/spec/rails_admin/adapters/active_record/abstract_object_spec.rb @@ -9,6 +9,14 @@ expect(object).to receive(:method_call) abstract_object.method_call end + + context 'when the method of underlying object receives keyword arguments' do + let(:object) { Class.new { def foo(bar: 1); end }.new } + + it 'does not break on proxying' do + expect { abstract_object.foo(bar: 2) }.not_to raise_error + end + end end describe 'create' do