Repository: rails/rails
File: activerecord/lib/active_record/relation/predicate_builder.rb (Ruby)

Code before:
      other.table = table
      other
    end

    protected
      attr_writer :table

      def expand_from_hash(attributes, &block)
        return [Arel.sql("1=0", retryable: true)] if attributes.empty?

        attributes.flat_map do |key, value|
          if key.is_a?(Array) && key.size == 1
            key = key.first
            value = value.flatten
          end

          if key.is_a?(Array)
            queries = Array(value).map do |ids_set|
              raise ArgumentError, "Expected corresponding value for #{key} to be an Array" unless ids_set.is_a?(Array)
              expand_from_hash(key.zip(ids_set).to_h)
            end
            grouping_queries(queries)
          elsif value.is_a?(Hash) && !table.has_column?(key)
            table.associated_table(key, &block)
              .predicate_builder.expand_from_hash(value.stringify_keys)
          elsif table.associated_with?(key)
            # Find the foreign key when using queries such as:
            # Post.where(author: author)
            #
            # For polymorphic relationships, find the foreign key and type:
            # PriceEstimate.where(estimate_of: treasure)
            associated_table = table.associated_table(key)
            if associated_table.polymorphic_association?
              value = [value] unless value.is_a?(Array)
              klass = PolymorphicArrayValue
            elsif associated_table.through_association?
              next associated_table.predicate_builder.expand_from_hash(
                associated_table.primary_key => value
              )
            end

            klass ||= AssociationQueryValue
            queries = klass.new(associated_table, value).queries.map! do |query|
              # If the query produced is identical to attributes don't go any deeper.
              # Prevents stack level too deep errors when association and foreign_key are identical.
              query == attributes ? self[key, value] : expand_from_hash(query)
            end

            grouping_queries(queries)
          elsif table.aggregated_with?(key)
            mapping = table.reflect_on_aggregation(key).mapping

Review comment (suggestion):
Using a boolean method to get the value is a breaking the expectation of what this method means. Let's use the non-`?` version, or rename it since it is nodoc.

Code after:
      other.table = table
      other
    end

    protected
      attr_writer :table

      def expand_from_hash(attributes, &block)
        return [Arel.sql("1=0", retryable: true)] if attributes.empty?

        attributes.flat_map do |key, value|
          if key.is_a?(Array) && key.size == 1
            key = key.first
            value = value.flatten
          end

          if key.is_a?(Array)
            queries = Array(value).map do |ids_set|
              raise ArgumentError, "Expected corresponding value for #{key} to be an Array" unless ids_set.is_a?(Array)
              expand_from_hash(key.zip(ids_set).to_h)
            end
            grouping_queries(queries)
          elsif value.is_a?(Hash) && !table.has_column?(key)
            table.associated_table(key, &block)
              .predicate_builder.expand_from_hash(value.stringify_keys)
          elsif (associated_reflection = table.associated_with?(key))
            # Find the foreign key when using queries such as:
            # Post.where(author: author)
            #
            # For polymorphic relationships, find the foreign key and type:
            # PriceEstimate.where(estimate_of: treasure)

            if associated_reflection.polymorphic?
              value = [value] unless value.is_a?(Array)
              klass = PolymorphicArrayValue
            elsif associated_reflection.through_reflection?
              associated_table = table.associated_table(key)

              next associated_table.predicate_builder.expand_from_hash(
                associated_table.primary_key => value
              )
            end

            klass ||= AssociationQueryValue
            queries = klass.new(associated_reflection, value).queries.map! do |query|
              # If the query produced is identical to attributes don't go any deeper.
              # Prevents stack level too deep errors when association and foreign_key are identical.
              query == attributes ? self[key, value] : expand_from_hash(query)
            end

            grouping_queries(queries)