Class: Faraday::Request::Multipart
- Inherits:
-
UrlEncoded
- Object
- Middleware
- UrlEncoded
- Faraday::Request::Multipart
- Defined in:
- lib/faraday/request/multipart.rb
Constant Summary collapse
- DEFAULT_BOUNDARY =
"-----------RubyMultipartPost".freeze
Constants inherited from UrlEncoded
Instance Method Summary collapse
- #call(env) ⇒ Object
- #create_multipart(env, params) ⇒ Object
- #has_multipart?(body) ⇒ Boolean
- #process_params(params, prefix = nil, pieces = nil, &block) ⇒ Object
- #process_request?(env) ⇒ Boolean
Methods inherited from UrlEncoded
#match_content_type, #request_type
Methods inherited from Middleware
dependency, #initialize, loaded?, setup_parallel_manager
Constructor Details
This class inherits a constructor from Faraday::Middleware
Instance Method Details
#call(env) ⇒ Object
6 7 8 9 10 11 12 13 14 |
# File 'lib/faraday/request/multipart.rb', line 6 def call(env) match_content_type(env) do |params| env[:request] ||= {} env[:request][:boundary] ||= DEFAULT_BOUNDARY env[:request_headers][CONTENT_TYPE] += ";boundary=#{env[:request][:boundary]}" env[:body] = create_multipart(env, params) end @app.call env end |
#create_multipart(env, params) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/faraday/request/multipart.rb', line 35 def create_multipart(env, params) boundary = env[:request][:boundary] parts = process_params(params) do |key, value| Faraday::Parts::Part.new(boundary, key, value) end parts << Faraday::Parts::EpiloguePart.new(boundary) body = Faraday::CompositeReadIO.new(parts) env[:request_headers]['Content-Length'] = body.length.to_s return body end |
#has_multipart?(body) ⇒ Boolean
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/faraday/request/multipart.rb', line 24 def has_multipart?(body) body.values.each do |val| if val.respond_to?(:content_type) return true elsif val.respond_to?(:values) return true if has_multipart?(val) end end false end |
#process_params(params, prefix = nil, pieces = nil, &block) ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/faraday/request/multipart.rb', line 47 def process_params(params, prefix = nil, pieces = nil, &block) params.inject(pieces || []) do |all, (key, value)| key = "#{prefix}[#{key}]" if prefix case value when Array values = value.inject([]) { |a,v| a << [nil, v] } process_params(values, key, all, &block) when Hash process_params(value, key, all, &block) else all << block.call(key, value) end end end |
#process_request?(env) ⇒ Boolean
16 17 18 19 20 21 22 |
# File 'lib/faraday/request/multipart.rb', line 16 def process_request?(env) type = request_type(env) env[:body].respond_to?(:each_key) and !env[:body].empty? and ( (type.empty? and has_multipart?(env[:body])) or type == self.class.mime_type ) end |