5 # Used for simple response middleware.
6 class Middleware < Faraday::Middleware
8 @app.call(env).on_complete do |environment|
9 on_complete(environment)
13 # Override this to modify the environment after the response has finished.
14 # Calls the `parse` method if defined
16 env.body = parse(env.body) if respond_to?(:parse) && env.parse_body?
21 extend MiddlewareRegistry
23 register_middleware File.expand_path('../response', __FILE__),
24 :raise_error => [:RaiseError, 'raise_error'],
25 :logger => [:Logger, 'logger']
27 def initialize(env = nil)
28 @env = Env.from(env) if env
29 @on_complete_callbacks = []
34 def_delegators :env, :to_hash
37 finished? ? env.status : nil
41 finished? ? env.response_headers : {}
43 def_delegator :headers, :[]
46 finished? ? env.body : nil
55 @on_complete_callbacks << Proc.new
63 raise "response already finished" if finished?
64 @on_complete_callbacks.each { |callback| callback.call(env) }
70 finished? && env.success?
73 # because @on_complete_callbacks cannot be marshalled
76 :status => @env.status, :body => @env.body,
77 :response_headers => @env.response_headers
85 # Expand the env with more properties, without overriding existing ones.
86 # Useful for applying request params after restoring a marshalled Response.
87 def apply_request(request_env)
88 raise "response didn't finish yet" unless finished?
89 @env = Env.from(request_env).update(@env)