diff --git a/lib/forwardable.rb b/lib/forwardable.rb index 71b4e6a..8e74e84 100644 --- a/lib/forwardable.rb +++ b/lib/forwardable.rb @@ -190,9 +190,7 @@ def def_instance_delegator(accessor, method, ali = method) # If it's not a class or module, it's an instance mod = Module === self ? self : singleton_class - ret = mod.module_eval(&gen) - mod.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7' - ret + mod.module_eval(&gen) end alias delegate instance_delegate @@ -209,7 +207,8 @@ def self._delegator_method(obj, accessor, method, ali) accessor = "#{accessor}()" end - method_call = ".__send__(:#{method}, *args, &block)" + args = RUBY_VERSION >= '2.7' ? '...' : '*args, &block' + method_call = ".__send__(:#{method}, #{args})" if _valid_method?(method) loc, = caller_locations(2,1) pre = "_ =" @@ -220,7 +219,7 @@ def self._delegator_method(obj, accessor, method, ali) ::Kernel.warn #{mesg.dump}"\#{_.class}"'##{method}', uplevel: 1 _#{method_call} else - _.#{method}(*args, &block) + _.#{method}(#{args}) end end; end @@ -228,7 +227,7 @@ def self._delegator_method(obj, accessor, method, ali) _compile_method("#{<<-"begin;"}\n#{<<-"end;"}", __FILE__, __LINE__+1) begin; proc do - def #{ali}(*args, &block) + def #{ali}(#{args}) #{pre} begin #{accessor} @@ -310,9 +309,7 @@ def def_single_delegators(accessor, *methods) def def_single_delegator(accessor, method, ali = method) gen = Forwardable._delegator_method(self, accessor, method, ali) - ret = instance_eval(&gen) - singleton_class.__send__(:ruby2_keywords, ali) if RUBY_VERSION >= '2.7' - ret + instance_eval(&gen) end alias delegate single_delegate