Methods

Constants

COMMON_SEP = { ";" => /; */n, ";," => /[;,] */n, "&" => /& */n, "&;" => /[&;] */n }
COMPAT_SEP = /[&;] */n
DEFAULT_SEP = /& */n
SEMICOLON_COMPAT = defined?(::Rack::QueryParser::DEFAULT_SEP) && ::Rack::QueryParser::DEFAULT_SEP.to_s.include?(";")

Class Public methods

each_pair(s, separator = nil)

📝 Source code
# File actionpack/lib/action_dispatch/http/query_parser.rb, line 20
    def self.each_pair(s, separator = nil)
      return enum_for(:each_pair, s, separator) unless block_given?

      s ||= ""

      splitter =
        if separator
          COMMON_SEP[separator] || /[#{separator}] */n
        elsif strict_query_string_separator
          DEFAULT_SEP
        elsif SEMICOLON_COMPAT && s.include?(";")
          if strict_query_string_separator.nil?
            ActionDispatch.deprecator.warn("Using semicolon as a query string separator is deprecated and will not be supported in Rails 8.1 or Rack 3.0. Use `&` instead.")
          end
          COMPAT_SEP
        else
          DEFAULT_SEP
        end

      s.split(splitter).each do |part|
        next if part.empty?

        k, v = part.split("=", 2)

        k = URI.decode_www_form_component(k)
        v &&= URI.decode_www_form_component(v)

        yield k, v
      end

      nil
    end
🔎 See on GitHub