class Faraday::Response

def apply_request(request_env)

Useful for applying request params after restoring a marshalled Response.
Expand the env with more properties, without overriding existing ones.
def apply_request(request_env)
  raise "response didn't finish yet" unless finished?
  @env = Env.from(request_env).merge(@env)
  return self
end

def body

def body
  finished? ? env.body : nil
end

def finish(env)

def finish(env)
  raise "response already finished" if finished?
  @env = Env.from(env)
  @on_complete_callbacks.each { |callback| callback.call(env) }
  return self
end

def finished?

def finished?
  !!env
end

def headers

def headers
  finished? ? env.response_headers : {}
end

def initialize(env = nil)

def initialize(env = nil)
  @env = Env.from(env) if env
  @on_complete_callbacks = []
end

def marshal_dump

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)

def marshal_load(env)
  @env = Env.from(env)
end

def on_complete

def on_complete
  if not finished?
    @on_complete_callbacks << Proc.new
  else
    yield env
  end
  return self
end

def status

def status
  finished? ? env.status : nil
end

def success?

def success?
  finished? && env.success?
end