forked from lostisland/faraday
-
Notifications
You must be signed in to change notification settings - Fork 0
/
response.rb
49 lines (42 loc) · 1.29 KB
/
response.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
module Faraday
class Response
# Used for simple response middleware that parse the incoming body into
# a ruby object. Expects a #parse instance method.
class Middleware < Faraday::Middleware
def call(env)
env[:response].on_complete do |finished_env|
finished_env[:body] = parse(finished_env[:body])
end
@app.call(env)
end
end
extend AutoloadHelper
autoload_all 'faraday/response',
:Yajl => 'yajl',
:ActiveSupportJson => 'active_support_json'
register_lookup_modules \
:yajl => :Yajl,
:activesupport_json => :ActiveSupportJson,
:rails_json => :ActiveSupportJson,
:active_support_json => :ActiveSupportJson
attr_accessor :status, :headers, :body
def initialize
@status, @headers, @body = nil, nil, nil
@on_complete_callbacks = []
end
def on_complete(&block)
@on_complete_callbacks << block
end
def finish(env)
return self if @status
env[:body] ||= ''
env[:response_headers] ||= {}
@on_complete_callbacks.each { |c| c.call(env) }
@status, @headers, @body = env[:status], env[:response_headers], env[:body]
self
end
def success?
status == 200
end
end
end