class HTTParty::Request::Body
Attributes
params[R]
query_string_normalizer[R]
Public Class Methods
new(params, query_string_normalizer: nil)
click to toggle source
# File lib/httparty/request/body.rb, line 6 def initialize(params, query_string_normalizer: nil) @params = params @query_string_normalizer = query_string_normalizer end
Public Instance Methods
boundary()
click to toggle source
# File lib/httparty/request/body.rb, line 19 def boundary @boundary ||= MultipartBoundary.generate end
call()
click to toggle source
# File lib/httparty/request/body.rb, line 11 def call if params.respond_to?(:to_hash) multipart? ? generate_multipart : normalize_query(params) else params end end
multipart?()
click to toggle source
# File lib/httparty/request/body.rb, line 23 def multipart? params.respond_to?(:to_hash) && has_file?(params.to_hash) end
Private Instance Methods
file?(object)
click to toggle source
# File lib/httparty/request/body.rb, line 58 def file?(object) object.respond_to?(:path) && object.respond_to?(:read) # add memoization end
generate_multipart()
click to toggle source
# File lib/httparty/request/body.rb, line 29 def generate_multipart normalized_params = params.flat_map { |key, value| HashConversions.normalize_keys(key, value) } multipart = normalized_params.inject('') do |memo, (key, value)| memo += "--#{boundary}\r\n" memo += %(Content-Disposition: form-data; name="#{key}") memo += %(; filename="#{File.basename(value)}") if file?(value) memo += "\r\n" memo += "Content-Type: application/octet-stream\r\n" if file?(value) memo += "\r\n" memo += file?(value) ? value.read : value.to_s memo += "\r\n" end multipart += "--#{boundary}--\r\n" end
has_file?(hash)
click to toggle source
# File lib/httparty/request/body.rb, line 46 def has_file?(hash) hash.detect do |key, value| if value.respond_to?(:to_hash) || includes_hash?(value) has_file?(value) elsif value.respond_to?(:to_ary) value.any? { |e| file?(e) } else file?(value) end end end
includes_hash?(object)
click to toggle source
# File lib/httparty/request/body.rb, line 62 def includes_hash?(object) object.respond_to?(:to_ary) && object.any? { |e| e.respond_to?(:hash) } end
normalize_query(query)
click to toggle source
# File lib/httparty/request/body.rb, line 66 def normalize_query(query) if query_string_normalizer query_string_normalizer.call(query) else HashConversions.to_params(query) end end