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 60 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 50 def encoder=(implementation) raise ArgumentError unless implementation.respond_to? :call @encoder = implementation end
new(data, encoder: nil)
click to toggle source
@param [#to_h, Hash] data form data key-value Hash
# File lib/http/form_data/urlencoded.rb, line 66 def initialize(data, encoder: nil) encoder ||= self.class.encoder @io = StringIO.new(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 74 def content_type "application/x-www-form-urlencoded" end