# File lib/webmock/util/query_mapper.rb, line 177
      def values_to_query(new_query_values, options = {})
        options[:notation] ||= :subscript
        return if new_query_values.nil?

        unless new_query_values.is_a?(Array)
          unless new_query_values.respond_to?(:to_hash)
            raise TypeError,
                  "Can't convert #{new_query_values.class} into Hash."
          end
          new_query_values = new_query_values.to_hash
          new_query_values = new_query_values.inject([]) do |object, (key, value)|
            key = key.to_s if key.is_a?(::Symbol) || key.nil?
            if value.is_a?(Array)
              value.each { |v| object << [key.to_s + '[]', v] }
            elsif value.is_a?(Hash)
              value.each { |k, v| object << ["#{key.to_s}[#{k}]", v]}
            else
              object << [key.to_s, value]
            end
            object
          end
          # Useful default for OAuth and caching.
          # Only to be used for non-Array inputs. Arrays should preserve order.
          begin
            new_query_values.sort! # may raise for non-comparable values
          rescue NoMethodError, ArgumentError
            # ignore
          end
        end

        buffer = ''
        new_query_values.each do |parent, value|
          encoded_parent = ::Addressable::URI.encode_component(
              parent.dup, ::Addressable::URI::CharacterClasses::UNRESERVED
          )
          buffer << "#{to_query(encoded_parent, value, options)}&"
        end
        buffer.chop
      end