module ActiveModel::AttributeMethods::ClassMethods

def define_attribute_method_pattern(pattern, attr_name, owner:, as:, override: false) # :nodoc:

: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