class Tapioca::Dsl::Compilers::ActiveRecordRelations

def create_association_relation_methods

def create_association_relation_methods
  returning_type = "T.nilable(T.any(T::Array[Symbol], FalseClass))"
  unique_by_type = "T.nilable(T.any(T::Array[Symbol], Symbol))"
  ASSOCIATION_METHODS.each do |method_name|
    case method_name
    when :insert_all, :insert_all!, :upsert_all
      parameters = [
        create_param("attributes", type: "T::Array[Hash]"),
        create_kw_opt_param("returning", type: returning_type, default: "nil"),
      ]
      # Bang methods don't have the `unique_by` parameter
      unless bang_method?(method_name)
        parameters << create_kw_opt_param("unique_by", type: unique_by_type, default: "nil")
      end
      association_relation_methods_module.create_method(
        method_name.to_s,
        parameters: parameters,
        return_type: "ActiveRecord::Result",
      )
    when :insert, :insert!, :upsert
      parameters = [
        create_param("attributes", type: "Hash"),
        create_kw_opt_param("returning", type: returning_type, default: "nil"),
      ]
      # Bang methods don't have the `unique_by` parameter
      unless bang_method?(method_name)
        parameters << create_kw_opt_param("unique_by", type: unique_by_type, default: "nil")
      end
      association_relation_methods_module.create_method(
        method_name.to_s,
        parameters: parameters,
        return_type: "ActiveRecord::Result",
      )
    when :proxy_association
      # skip - private method
    end
  end
end