Class: Faraday::Adapter::RackClient

Inherits:
Faraday::Adapter show all
Defined in:
lib/rack/client/adapter/faraday.rb

Instance Method Summary collapse

Constructor Details

#initialize(faraday_app, rack_client_adapter = :default, *a, &b) ⇒ RackClient

Returns a new instance of RackClient.



9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rack/client/adapter/faraday.rb', line 9

def initialize(faraday_app, rack_client_adapter = :default, *a, &b)
  super(faraday_app)

  klass = case rack_client_adapter
          when :default then ::Rack::Client
          when :simple  then ::Rack::Client::Simple
          when :base    then ::Rack::Client::Base
          else rack_client_adapter
          end

  @rack_client_app = klass.new(*a, &b)
end

Instance Method Details

#call(faraday_env) ⇒ Object



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/rack/client/adapter/faraday.rb', line 22

def call(faraday_env)
  rack_env = to_rack_env(faraday_env)
  timeout  = faraday_env[:request][:timeout] || faraday_env[:request][:open_timeout]

  rack_response = if timeout
    Timer.timeout(timeout, Faraday::Error::TimeoutError) { @rack_client_app.call(rack_env) }
  else
    @rack_client_app.call(rack_env)
  end

  status, headers, rack_body = rack_response.to_a

  body = ''
  rack_body.each {|part| body << part }

  rack_body.close if rack_body.respond_to? :close

  save_response(faraday_env, status, body, headers)

  @app.call faraday_env
end

#to_rack_env(faraday_env) ⇒ Object



44
45
46
47
48
49
50
51
52
# File 'lib/rack/client/adapter/faraday.rb', line 44

def to_rack_env(faraday_env)
  body = faraday_env.body
  body = body.read if body.respond_to? :read

  @rack_client_app.build_env(faraday_env.method.to_s.upcase,
                             faraday_env.url.to_s,
                             faraday_env.request_headers,
                             body)
end