Sha256: b914c6163a4a32acf3b238ae7aaea5436ae3c73a0bab8820212188b2e428c8ac

Contents?: true

Size: 1.35 KB

Versions: 28

Compression:

Stored size: 1.35 KB

Contents

require 'cgi'
require 'uri'
class Rack::App::Params

  E = ::Rack::App::Constants::ENV

  def to_hash
    validated_params || merged_params
  end

  def merged_params
    @env[E::MERGED_PARAMS] ||= query_string_params.merge(path_segments_params)
  end

  def query_string_params
    @env[E::QUERY_STRING_PARAMS] ||= generate_query_params
  end

  def path_segments_params
    @env[E::PATH_SEGMENTS_PARAMS]
  end

  def validated_params
    @env[E::VALIDATED_PARAMS]
  end

  protected

  def initialize(env)
    @env = env
  end

  def generate_query_params
    raw_rack_formatted_params.reduce({}) do |params_collection, (k, v)|
      params_collection[k.sub(/\[\]$/, '')] = v
      params_collection
    end
  end

  def single_paramter_value?(v)
    v.is_a?(Array) && v.length === 1
  end

  def formatted_value(key, value)
    single_paramter_value?(value) && !key.end_with?('[]') ? value[0] : value
  end

  def query_string
    @env[::Rack::QUERY_STRING]
  end

  def raw_rack_formatted_params
    ::Rack::Utils.parse_nested_query(query_string).merge!(params_that_presented_multiple_times)
  end

  def params_that_presented_multiple_times
    cgi_params = CGI.parse(query_string)
    cgi_params.reject! { |k, v| v.length == 1 && k !~ /^\w+$/ }
    cgi_params.reduce({}) do |result, (key, value)|
      result[key] = formatted_value(key, value)
      result
    end
  end
end

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
rack-app-11.0.2 lib/rack/app/params.rb
rack-app-11.0.1 lib/rack/app/params.rb
rack-app-11.0.0 lib/rack/app/params.rb
rack-app-10.0.0 lib/rack/app/params.rb
rack-app-9.0.0 lib/rack/app/params.rb
rack-app-8.1.0 lib/rack/app/params.rb
rack-app-8.0.1 lib/rack/app/params.rb
rack-app-8.0.0 lib/rack/app/params.rb
mountapi-0.11.1 vendor/bundle/ruby/2.7.0/gems/rack-app-7.7.0/lib/rack/app/params.rb
rack-app-7.7.0 lib/rack/app/params.rb
rack-app-7.6.5 lib/rack/app/params.rb
rack-app-7.6.4 lib/rack/app/params.rb
rack-app-7.6.3 lib/rack/app/params.rb
rack-app-7.6.2 lib/rack/app/params.rb
rack-app-7.6.1 lib/rack/app/params.rb
rack-app-7.6.0 lib/rack/app/params.rb
rack-app-7.5.2 lib/rack/app/params.rb
rack-app-7.5.1 lib/rack/app/params.rb
rack-app-7.5.0 lib/rack/app/params.rb
rack-app-7.4.0 lib/rack/app/params.rb