Class: BraintreeHttp::Multipart

Inherits:
Object
  • Object
show all
Defined in:
lib/braintreehttp/serializers/multipart.rb

Constant Summary collapse

LINE_FEED =
"\r\n"

Instance Method Summary collapse

Instance Method Details

#_add_file_part(key, file) ⇒ Object



34
35
36
37
38
# File 'lib/braintreehttp/serializers/multipart.rb', line 34

def _add_file_part(key, file)
  mime_type = _mime_type_for_file_name(file.path)
  return "Content-Disposition: form-data; name=\"#{key}\"; filename=\"#{File.basename(file.path)}\"#{LINE_FEED}" +
    "Content-Type: #{mime_type}#{LINE_FEED}#{LINE_FEED}#{file.read}#{LINE_FEED}"
end

#_add_form_field(key, value) ⇒ Object



30
31
32
# File 'lib/braintreehttp/serializers/multipart.rb', line 30

def _add_form_field(key, value)
  return "Content-Disposition: form-data; name=\"#{key}\"#{LINE_FEED}#{LINE_FEED}#{value}#{LINE_FEED}"
end

#_mime_type_for_file_name(filename) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/braintreehttp/serializers/multipart.rb', line 40

def _mime_type_for_file_name(filename)
  file_extension = File.extname(filename).strip.downcase[1..-1]
  if file_extension == "jpeg" || file_extension == "jpg"
    return "image/jpeg"
  elsif file_extension == "png"
    return "image/png"
  elsif file_extension == "pdf"
    return "application/pdf"
  else
    return "application/octet-stream"
  end
end

#content_typeObject



26
27
28
# File 'lib/braintreehttp/serializers/multipart.rb', line 26

def content_type
  /multipart\/.*/
end

#decode(body) ⇒ Object



22
23
24
# File 'lib/braintreehttp/serializers/multipart.rb', line 22

def decode(body)
  raise UnsupportedEncodingError.new("Multipart does not support deserialization")
end

#encode(request) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/braintreehttp/serializers/multipart.rb', line 6

def encode(request)
  boundary = DateTime.now.strftime("%Q")
  request.headers["Content-Type"] = "#{request.headers['Content-Type']}; boundary=#{boundary}"

  form_params = []
  request.body.each do |k, v|
    if v.is_a? File
      form_params.push(_add_file_part(k, v))
    else
      form_params.push(_add_form_field(k, v))
    end
  end

  form_params.collect {|p| "--" + boundary + "#{LINE_FEED}" + p}.join("") + "--" + boundary + "--"
end