Class: PayPalHttp::Multipart
- Inherits:
-
Object
- Object
- PayPalHttp::Multipart
- Defined in:
- lib/paypalhttp/serializers/multipart.rb
Constant Summary collapse
- LINE_FEED =
"\r\n"
Instance Method Summary collapse
- #_add_file_part(key, file) ⇒ Object
- #_add_form_field(key, value) ⇒ Object
- #_add_form_part(key, form_part) ⇒ Object
- #_mime_type_for_file_name(filename) ⇒ Object
- #content_type ⇒ Object
- #decode(body) ⇒ Object
- #encode(request) ⇒ Object
- #format_headers(headers) ⇒ Object
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_type ⇒ Object
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 |