Remove duplication between alias_attribute_method_definition and define_proxy_call

This commit is contained in:
Rafael Mendonça França 2023-11-22 17:27:05 +00:00
parent 8ec3843cd8
commit 139e806e5c
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948

@ -231,21 +231,7 @@ def alias_attribute_method_definition(code_generator, pattern, new_name, old_nam
call_args = []
call_args << parameters if parameters
code_generator.define_cached_method(method_name, as: mangled_name, namespace: :alias_attribute) do |batch|
body = if CALL_COMPILABLE_REGEXP.match?(target_name)
"self.#{target_name}(#{call_args.join(", ")})"
else
call_args.unshift(":'#{target_name}'")
"send(#{call_args.join(", ")})"
end
modifier = parameters == FORWARD_PARAMETERS ? "ruby2_keywords " : ""
batch <<
"#{modifier}def #{mangled_name}(#{parameters || ''})" <<
body <<
"end"
end
define_call(code_generator, method_name, target_name, mangled_name, parameters, call_args, namespace: :alias_attribute)
end
# Is +new_name+ an alias?
@ -424,21 +410,7 @@ def define_proxy_call(code_generator, name, proxy_target, parameters, *call_args
call_args << parameters if parameters
namespace = :"#{namespace}_#{proxy_target}_#{call_args.join("_")}}"
code_generator.define_cached_method(name, as: mangled_name, namespace: namespace) do |batch|
body = if CALL_COMPILABLE_REGEXP.match?(proxy_target)
"self.#{proxy_target}(#{call_args.join(", ")})"
else
call_args.unshift(":'#{proxy_target}'")
"send(#{call_args.join(", ")})"
end
modifier = parameters == FORWARD_PARAMETERS ? "ruby2_keywords " : ""
batch <<
"#{modifier}def #{mangled_name}(#{parameters || ''})" <<
body <<
"end"
end
define_call(code_generator, name, proxy_target, mangled_name, parameters, call_args, namespace: namespace)
end
def build_mangled_name(name)
@ -451,6 +423,24 @@ def build_mangled_name(name)
mangled_name
end
def define_call(code_generator, name, target_name, mangled_name, parameters, call_args, namespace:)
code_generator.define_cached_method(name, as: mangled_name, namespace: namespace) do |batch|
body = if CALL_COMPILABLE_REGEXP.match?(target_name)
"self.#{target_name}(#{call_args.join(", ")})"
else
call_args.unshift(":'#{target_name}'")
"send(#{call_args.join(", ")})"
end
modifier = parameters == FORWARD_PARAMETERS ? "ruby2_keywords " : ""
batch <<
"#{modifier}def #{mangled_name}(#{parameters || ''})" <<
body <<
"end"
end
end
class AttributeMethodPattern # :nodoc:
attr_reader :prefix, :suffix, :proxy_target, :parameters