Sha256: a8b01c4a70e756343d2ab3638908a36ec5fb696bb55dd600f3ec67ee1f2b6da3

Contents?: true

Size: 1.37 KB

Versions: 2

Compression:

Stored size: 1.37 KB

Contents

class Map
  def param_for(*args, &block)
    options = Map.options_for!(args)

    prefix = options[:prefix] || 'map'

    src_key = args.flatten.map{|arg| Map.alphanumeric_key_for(arg)}

    dst_key = src_key.map{|k| k.is_a?(Numeric) ? 0 : k}

    src = self
    dst = Map.new

    value =
      if options.has_key?(:value)
        options[:value]
      else
        src.get(src_key).to_s
      end

    dst.set(dst_key, value)

    Param.param_for(dst, prefix)
  end

  def name_for(*args, &block)
    options = Map.options_for!(args)
    options[:value] = nil
    args.push(options)
    param_for(*args, &block)
  end

  module Param
    def param_for(value, prefix = nil)
      case value
        when Array
          value.map { |v|
            param_for(v, "#{ prefix }[]")
          }.join("&")

        when Hash
          value.map { |k, v|
            param_for(v, prefix ? "#{ prefix }[#{ escape(k) }]" : escape(k))
          }.join("&")

        when String
          raise ArgumentError, "value must be a Hash" if prefix.nil?
          "#{ prefix }=#{ escape(value) }"

        else
          prefix
      end
    end

    if(''.respond_to?(:bytesize))
      def bytesize(string) string.bytesize end
    else
      def bytesize(string) string.size end
    end

    require 'uri' unless defined?(URI)

    def escape(s)
      URI.encode_www_form_component(s)
    end

    extend(self)
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
map-6.4.1 lib/map/params.rb
map-6.4.0 lib/map/params.rb