Class: Faraday::Adapter
- Inherits:
-
Middleware
- Object
- Middleware
- Faraday::Adapter
- Extended by:
- AutoloadHelper
- Defined in:
- lib/faraday/adapter.rb,
lib/faraday/adapter/test.rb,
lib/faraday/adapter/excon.rb,
lib/faraday/adapter/logger.rb,
lib/faraday/adapter/patron.rb,
lib/faraday/adapter/net_http.rb,
lib/faraday/adapter/typhoeus.rb,
lib/faraday/adapter/em_synchrony.rb,
lib/faraday/adapter/action_dispatch.rb
Direct Known Subclasses
ActionDispatch, EMSynchrony, Excon, Logger, NetHttp, Patron, Typhoeus
Defined Under Namespace
Classes: ActionDispatch, EMSynchrony, Excon, Logger, NetHttp, Patron, Test, Typhoeus
Constant Summary collapse
- FORM_TYPE =
'application/x-www-form-urlencoded'.freeze
- MULTIPART_TYPE =
'multipart/form-data'.freeze
- CONTENT_TYPE =
'Content-Type'.freeze
- DEFAULT_BOUNDARY =
"-----------RubyMultipartPost".freeze
Instance Method Summary collapse
- #call(env) ⇒ Object
- #create_multipart(env, params, boundary = nil) ⇒ Object
-
#full_path_for(path, query = nil, fragment = nil) ⇒ Object
assume that query and fragment are already encoded properly.
- #has_multipart?(body) ⇒ Boolean
-
#process_body_for_request(env, body = env[:body], headers = env[:request_headers]) ⇒ Object
Converts a body hash into encoded form params.
- #process_to_params(pieces, params, base = nil) ⇒ Object
Methods included from AutoloadHelper
all_loaded_constants, autoload_all, load_autoloaded_constants, lookup_module, register_lookup_modules
Methods inherited from Middleware
#initialize, loaded?, setup_parallel_manager
Constructor Details
This class inherits a constructor from Faraday::Middleware
Instance Method Details
#call(env) ⇒ Object
29 30 31 |
# File 'lib/faraday/adapter.rb', line 29 def call(env) process_body_for_request(env) end |
#create_multipart(env, params, boundary = nil) ⇒ Object
73 74 75 76 77 78 79 80 81 82 |
# File 'lib/faraday/adapter.rb', line 73 def create_multipart(env, params, boundary = nil) boundary ||= env[:request][:boundary] parts = [] process_to_params(parts, params) do |key, value| Faraday::Parts::Part.new(boundary, key, value) end parts << Faraday::Parts::EpiloguePart.new(boundary) env[:request_headers]['Content-Length'] = parts.inject(0) {|sum,i| sum + i.length }.to_s Faraday::CompositeReadIO.new(*parts.map{|p| p.to_io }) end |
#full_path_for(path, query = nil, fragment = nil) ⇒ Object
assume that query and fragment are already encoded properly
102 103 104 105 106 107 108 109 110 111 |
# File 'lib/faraday/adapter.rb', line 102 def full_path_for(path, query = nil, fragment = nil) full_path = path.dup if query && !query.empty? full_path << "?#{query}" end if fragment && !fragment.empty? full_path << "##{fragment}" end full_path end |
#has_multipart?(body) ⇒ Boolean
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/faraday/adapter.rb', line 62 def has_multipart?(body) body.values.each do |v| if v.respond_to?(:content_type) return true elsif v.respond_to?(:values) return true if has_multipart?(v) end end false end |
#process_body_for_request(env, body = env[:body], headers = env[:request_headers]) ⇒ Object
Converts a body hash into encoded form params. This is done as late as possible in the request cycle in case some other middleware wants to act on the request before sending it out.
env - The current request environment Hash. body - A Hash of keys/values. Strings and empty values will be
ignored. Default: env[:body]
headers - The Hash of request headers. Default: env
Returns nothing. If the body is processed, it is replaced in the environment for you.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/faraday/adapter.rb', line 44 def process_body_for_request(env, body = env[:body], headers = env[:request_headers]) return if body.nil? || body.empty? || !body.respond_to?(:each_key) if has_multipart?(body) env[:request] ||= {} env[:request][:boundary] ||= DEFAULT_BOUNDARY headers[CONTENT_TYPE] = MULTIPART_TYPE + ";boundary=#{env[:request][:boundary]}" env[:body] = create_multipart(env, body) else type = headers[CONTENT_TYPE] headers[CONTENT_TYPE] = FORM_TYPE if type.nil? || type.empty? parts = [] process_to_params(parts, env[:body]) do |key, value| "#{key}=#{escape(value.to_s)}" end env[:body] = parts * "&" end end |
#process_to_params(pieces, params, base = nil) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/faraday/adapter.rb', line 84 def process_to_params(pieces, params, base = nil) params.to_a.each do |key, value| key_str = base ? "#{base}[#{key}]" : key block = block_given? ? Proc.new : nil case value when Array values = value.inject([]) { |a,v| a << [nil, v] } process_to_params(pieces, values, key_str, &block) when Hash process_to_params(pieces, value, key_str, &block) else pieces << block.call(key_str, value) end end end |