+++ /dev/null
-require 'forwardable'
-
-module Faraday
- class Response
- # Used for simple response middleware.
- class Middleware < Faraday::Middleware
- def call(env)
- @app.call(env).on_complete do |environment|
- on_complete(environment)
- end
- end
-
- # Override this to modify the environment after the response has finished.
- # Calls the `parse` method if defined
- def on_complete(env)
- env.body = parse(env.body) if respond_to?(:parse) && env.parse_body?
- end
- end
-
- extend Forwardable
- extend MiddlewareRegistry
-
- register_middleware File.expand_path('../response', __FILE__),
- :raise_error => [:RaiseError, 'raise_error'],
- :logger => [:Logger, 'logger']
-
- def initialize(env = nil)
- @env = Env.from(env) if env
- @on_complete_callbacks = []
- end
-
- attr_reader :env
-
- def_delegators :env, :to_hash
-
- def status
- finished? ? env.status : nil
- end
-
- def headers
- finished? ? env.response_headers : {}
- end
- def_delegator :headers, :[]
-
- def body
- finished? ? env.body : nil
- end
-
- def finished?
- !!env
- end
-
- def on_complete
- if not finished?
- @on_complete_callbacks << Proc.new
- else
- yield(env)
- end
- return self
- end
-
- def finish(env)
- raise "response already finished" if finished?
- @on_complete_callbacks.each { |callback| callback.call(env) }
- @env = Env.from(env)
- return self
- end
-
- def success?
- finished? && env.success?
- end
-
- # because @on_complete_callbacks cannot be marshalled
- def marshal_dump
- !finished? ? nil : {
- :status => @env.status, :body => @env.body,
- :response_headers => @env.response_headers
- }
- end
-
- def marshal_load(env)
- @env = Env.from(env)
- end
-
- # Expand the env with more properties, without overriding existing ones.
- # Useful for applying request params after restoring a marshalled Response.
- def apply_request(request_env)
- raise "response didn't finish yet" unless finished?
- @env = Env.from(request_env).update(@env)
- return self
- end
- end
-end