class RestClient::Payload::Multipart

Constants

EOL

Public Instance Methods

boundary() click to toggle source
# File lib/restclient/payload.rb, line 220
def boundary
  @boundary ||= rand(1_000_000).to_s
end
build_stream(params) click to toggle source
# File lib/restclient/payload.rb, line 164
def build_stream(params)
  b = "--#{boundary}"

  @stream = Tempfile.new("RESTClient.Stream.#{rand(1000)}")
  @stream.binmode
  @stream.write(b + EOL)

  if params.is_a? Hash
    x = flatten_params(params)
  else
    x = params
  end

  last_index = x.length - 1
  x.each_with_index do |a, index|
    k, v = * a
    if v.respond_to?(:read) && v.respond_to?(:path)
      create_file_field(@stream, k, v)
    else
      create_regular_field(@stream, k, v)
    end
    @stream.write(EOL + b)
    @stream.write(EOL) unless last_index == index
  end
  @stream.write('--')
  @stream.write(EOL)
  @stream.seek(0)
end
close() click to toggle source
# File lib/restclient/payload.rb, line 233
def close
  @stream.close!
end
create_file_field(s, k, v) click to toggle source
# File lib/restclient/payload.rb, line 200
def create_file_field(s, k, v)
  begin
    s.write("Content-Disposition: form-data;")
    s.write(" name=\"#{k}\";") unless (k.nil? || k=='')
    s.write(" filename=\"#{v.respond_to?(:original_filename) ? v.original_filename : File.basename(v.path)}\"#{EOL}")
    s.write("Content-Type: #{v.respond_to?(:content_type) ? v.content_type : mime_for(v.path)}#{EOL}")
    s.write(EOL)
    while (data = v.read(8124))
      s.write(data)
    end
  ensure
    v.close if v.respond_to?(:close)
  end
end
create_regular_field(s, k, v) click to toggle source
# File lib/restclient/payload.rb, line 193
def create_regular_field(s, k, v)
  s.write("Content-Disposition: form-data; name=\"#{k}\"")
  s.write(EOL)
  s.write(EOL)
  s.write(v)
end
handle_key(key) click to toggle source

for Multipart do not escape the keys

# File lib/restclient/payload.rb, line 225
def handle_key key
  key
end
headers() click to toggle source
Calls superclass method RestClient::Payload::Base#headers
# File lib/restclient/payload.rb, line 229
def headers
  super.merge({'Content-Type' => %Q{multipart/form-data; boundary=#{boundary}}})
end
mime_for(path) click to toggle source
# File lib/restclient/payload.rb, line 215
def mime_for(path)
  mime = MIME::Types.type_for path
  mime.empty? ? 'text/plain' : mime[0].content_type
end