module ActiveModel::AttributeMethods::ClassMethods
def define_attribute_method_pattern(pattern, attr_name, owner:, as:, override: false) # :nodoc:
def define_attribute_method_pattern(pattern, attr_name, owner:, as:, override: false) # :nodoc: canonical_method_name = pattern.method_name(attr_name) public_method_name = pattern.method_name(as) # If defining a regular attribute method, we don't override methods that are explicitly # defined in parent classes. if instance_method_already_implemented?(public_method_name) # However, for `alias_attribute`, we always define the method. # We check for override second because `instance_method_already_implemented?` # also check for dangerous methods. return unless override end generate_method = "define_method_#{pattern.proxy_target}" if respond_to?(generate_method, true) send(generate_method, attr_name.to_s, owner: owner, as: as) else define_proxy_call( owner, canonical_method_name, pattern.proxy_target, pattern.parameters, attr_name.to_s, namespace: :active_model_proxy, as: public_method_name ) end end