Sha256: 33b29193dca7e8beaf7be5528a22b969bd1dc83a8c5a959b7f12c0bb46df26c4

Contents?: true

Size: 852 Bytes

Versions: 5

Compression:

Stored size: 852 Bytes

Contents

class Evil::Client::Middleware
  class StringifyQuery < Base
    private

    def build(env)
      return env if env&.fetch(:query, nil).to_h.empty?
      string = env[:query].flat_map { |key, val| normalize(val, key) }
                          .flat_map { |hash| stringify(hash) }
                          .join("&")

      env.merge(query_string: string)
    end

    def stringify(hash)
      hash.map do |keys, val|
        "#{keys.first}#{keys[1..-1].map { |key| "[#{key}]" }.join}=#{val}"
      end
    end

    def normalize(value, *keys)
      case value
      when Hash then
        value.flat_map { |key, val| normalize(val, *keys, key) }
      when Array then
        value.flat_map { |val| normalize(val, *keys, nil) }
      else
        [{ keys.map { |key| CGI.escape(key.to_s) } => CGI.escape(value.to_s) }]
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
evil-client-0.3.1 lib/evil/client/middleware/stringify_query.rb
evil-client-0.3.0 lib/evil/client/middleware/stringify_query.rb
evil-client-0.2.3 lib/evil/client/middleware/stringify_query.rb
evil-client-0.2.2 lib/evil/client/middleware/stringify_query.rb
evil-client-0.2.1 lib/evil/client/middleware/stringify_query.rb