class HTTP::FormData::Urlencoded

`application/x-www-form-urlencoded` form data.

Public Class Methods

encoder() click to toggle source

Returns form data encoder implementation. Default: `URI.encode_www_form`.

@see .encoder= @return [#call]

# File lib/http/form_data/urlencoded.rb, line 59
def encoder
  @encoder ||= ::URI.method(:encode_www_form)
end
encoder=(implementation) click to toggle source

Set custom form data encoder implementation.

@example

module CustomFormDataEncoder
  UNESCAPED_CHARS = /[^a-z0-9\-\.\_\~]/i

  def self.escape(s)
    ::URI::DEFAULT_PARSER.escape(s.to_s, UNESCAPED_CHARS)
  end

  def self.call(data)
    parts = []

    data.each do |k, v|
      k = escape(k)

      if v.nil?
        parts << k
      elsif v.respond_to?(:to_ary)
        v.to_ary.each { |vv| parts << "#{k}=#{escape vv}" }
      else
        parts << "#{k}=#{escape v}"
      end
    end

    parts.join("&")
  end
end

HTTP::FormData::Urlencoded.encoder = CustomFormDataEncoder

@raise [ArgumentError] if implementation deos not responds to `#call`. @param implementation [#call] @return [void]

# File lib/http/form_data/urlencoded.rb, line 49
def encoder=(implementation)
  raise ArgumentError unless implementation.respond_to? :call
  @encoder = implementation
end
new(data) click to toggle source

@param [#to_h, Hash] data form data key-value Hash

# File lib/http/form_data/urlencoded.rb, line 65
def initialize(data)
  @io = StringIO.new(self.class.encoder.call(FormData.ensure_hash(data)))
end

Public Instance Methods

content_type() click to toggle source

Returns MIME type to be used for HTTP request `Content-Type` header.

@return [String]

# File lib/http/form_data/urlencoded.rb, line 72
def content_type
  "application/x-www-form-urlencoded"
end