Class: PayPalHttp::Multipart

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

Constant Summary collapse

LINE_FEED =
"\r\n"

Instance Method Summary collapse

Instance Method Details

#_add_file_part(key, file) ⇒ Object



70
71
72
73
74
# File 'lib/paypalhttp/serializers/multipart.rb', line 70

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



36
37
38
# File 'lib/paypalhttp/serializers/multipart.rb', line 36

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

#_add_form_part(key, form_part) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/paypalhttp/serializers/multipart.rb', line 40

def _add_form_part(key, form_part)
  retValue = "Content-Disposition: form-data; name=\"#{key}\""
  formatted_headers = format_headers(form_part.headers)
  if formatted_headers["content-type"] == "application/json"
    retValue += "; filename=\"#{key}.json\""
  end
  retValue += "#{LINE_FEED}"

  form_part.headers.each do |key, value|
    retValue += "#{key}: #{value}#{LINE_FEED}"
  end

  retValue += "#{LINE_FEED}"

  if formatted_headers["content-type"]
    retValue += Encoder.new().serialize_request(OpenStruct.new({
      :verb => 'POST',
      :path => '/',
      :headers => formatted_headers,
      :body => form_part.value
    }))
  else
    retValue += form_part.value
  end

  retValue += "#{LINE_FEED}"

  return retValue
end

#_mime_type_for_file_name(filename) ⇒ Object



76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/paypalhttp/serializers/multipart.rb', line 76

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 == "gif"
    return "image/gif"
  elsif file_extension == "png"
    return "image/png"
  elsif file_extension == "pdf"
    return "application/pdf"
  else
    return "application/octet-stream"
  end
end

#content_typeObject



32
33
34
# File 'lib/paypalhttp/serializers/multipart.rb', line 32

def content_type
  /multipart\/.*/
end

#decode(body) ⇒ Object



28
29
30
# File 'lib/paypalhttp/serializers/multipart.rb', line 28

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
21
22
23
24
25
26
# File 'lib/paypalhttp/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 = []
  value_params = []
  file_params = []

  request.body.each do |k, v|
    if v.is_a? File
      file_params.push(_add_file_part(k, v))
    elsif v.is_a? FormPart
      value_params.push(_add_form_part(k, v))
    else
      value_params.push(_add_form_field(k, v))
    end
  end

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

#format_headers(headers) ⇒ Object



91
92
93
94
95
96
97
# File 'lib/paypalhttp/serializers/multipart.rb', line 91

def format_headers(headers)
  formatted_headers = {}
  headers.each do |key, value|
    formatted_headers[key.downcase] = value
  end
  formatted_headers
end