Class: Faraday::RackBuilder
- Inherits:
-
Object
- Object
- Faraday::RackBuilder
show all
- Defined in:
- lib/faraday/rack_builder.rb
Overview
A Builder that processes requests into responses by passing through an inner
middleware stack (heavily inspired by Rack).
Defined Under Namespace
Classes: Handler, StackLocked
Constant Summary
collapse
- NO_ARGUMENT =
Used to detect missing arguments
Object.new
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of RackBuilder.
61
62
63
64
65
|
# File 'lib/faraday/rack_builder.rb', line 61
def initialize(&block)
@adapter = nil
@handlers = []
build(&block)
end
|
Instance Attribute Details
#handlers ⇒ Object
Returns the value of attribute handlers.
18
19
20
|
# File 'lib/faraday/rack_builder.rb', line 18
def handlers
@handlers
end
|
Instance Method Details
#==(other) ⇒ Object
179
180
181
182
183
|
# File 'lib/faraday/rack_builder.rb', line 179
def ==(other)
other.is_a?(self.class) &&
@handlers == other.handlers &&
@adapter == other.adapter
end
|
#[](idx) ⇒ Object
79
80
81
|
# File 'lib/faraday/rack_builder.rb', line 79
def [](idx)
@handlers[idx]
end
|
#adapter(klass = NO_ARGUMENT, *args, **kwargs, &block) ⇒ Object
110
111
112
113
114
115
|
# File 'lib/faraday/rack_builder.rb', line 110
def adapter(klass = NO_ARGUMENT, *args, **kwargs, &block)
return @adapter if klass == NO_ARGUMENT || klass.nil?
klass = Faraday::Adapter.lookup_middleware(klass) if klass.is_a?(Symbol)
@adapter = self.class::Handler.new(klass, *args, **kwargs, &block)
end
|
#app ⇒ Object
The "rack app" wrapped in middleware. All requests are sent here.
The builder is responsible for creating the app object. After this,
the builder gets locked to ensure no further modifications are made
to the middleware stack.
Returns an object that responds to call
and returns a Response.
163
164
165
166
167
168
169
|
# File 'lib/faraday/rack_builder.rb', line 163
def app
@app ||= begin
lock!
ensure_adapter!
to_app
end
end
|
#build_env(connection, request) ⇒ Object
ENV Keys
:http_method - a symbolized request HTTP method (:get, :post)
:body - the request body that will eventually be converted to a string.
:url - URI instance for the current request.
:status - HTTP response status code
:request_headers - hash of HTTP Headers to be sent to the server
:response_headers - Hash of HTTP headers from the server
:parallel_manager - sent if the connection is in parallel mode
:request - Hash of options for configuring the request.
:timeout - open/read timeout Integer in seconds
:open_timeout - read timeout Integer in seconds
:proxy - Hash of proxy options
:uri - Proxy Server URI
:user - Proxy server username
:password - Proxy server password
:ssl - Hash of options for configuring SSL requests.
201
202
203
204
205
206
207
208
209
210
|
# File 'lib/faraday/rack_builder.rb', line 201
def build_env(connection, request)
exclusive_url = connection.build_exclusive_url(
request.path, request.params,
request.options.params_encoder
)
Env.new(request.http_method, request.body, exclusive_url,
request.options, request., connection.ssl,
connection.parallel_manager)
end
|
#build_response(connection, request) ⇒ Faraday::Response
Processes a Request into a Response by passing it through this Builder's
middleware stack.
152
153
154
|
# File 'lib/faraday/rack_builder.rb', line 152
def build_response(connection, request)
app.call(build_env(connection, request))
end
|
#delete(handler) ⇒ Object
140
141
142
143
|
# File 'lib/faraday/rack_builder.rb', line 140
def delete(handler)
raise_if_locked
@handlers.delete(handler)
end
|
#initialize_dup(original) ⇒ Object
67
68
69
70
71
|
# File 'lib/faraday/rack_builder.rb', line 67
def initialize_dup(original)
super
@adapter = original.adapter
@handlers = original.handlers.dup
end
|
#insert(index) ⇒ Object
Also known as:
insert_before
methods to push onto the various positions in the stack:
119
120
121
122
123
124
|
# File 'lib/faraday/rack_builder.rb', line 119
def insert(index, ...)
raise_if_locked
index = assert_index(index)
handler = self.class::Handler.new(...)
@handlers.insert(index, handler)
end
|
#insert_after(index) ⇒ Object
128
129
130
131
|
# File 'lib/faraday/rack_builder.rb', line 128
def insert_after(index, ...)
index = assert_index(index)
insert(index + 1, ...)
end
|
#lock! ⇒ Object
Locks the middleware stack to ensure no further modifications are made.
84
85
86
|
# File 'lib/faraday/rack_builder.rb', line 84
def lock!
@handlers.freeze
end
|
#locked? ⇒ Boolean
88
89
90
|
# File 'lib/faraday/rack_builder.rb', line 88
def locked?
@handlers.frozen?
end
|
#request(key) ⇒ Object
102
103
104
|
# File 'lib/faraday/rack_builder.rb', line 102
def request(key, ...)
use_symbol(Faraday::Request, key, ...)
end
|
#response ⇒ Object
106
107
108
|
# File 'lib/faraday/rack_builder.rb', line 106
def response(...)
use_symbol(Faraday::Response, ...)
end
|
#swap(index) ⇒ Object
133
134
135
136
137
138
|
# File 'lib/faraday/rack_builder.rb', line 133
def swap(index, ...)
raise_if_locked
index = assert_index(index)
@handlers.delete_at(index)
insert(index, ...)
end
|
#to_app ⇒ Object
171
172
173
174
175
176
177
|
# File 'lib/faraday/rack_builder.rb', line 171
def to_app
@handlers.reverse.inject(@adapter.build) do |app, handler|
handler.build(app)
end
end
|
#use(klass) ⇒ Object
92
93
94
95
96
97
98
99
100
|
# File 'lib/faraday/rack_builder.rb', line 92
def use(klass, ...)
if klass.is_a? Symbol
use_symbol(Faraday::Middleware, klass, ...)
else
raise_if_locked
raise_if_adapter(klass)
@handlers << self.class::Handler.new(klass, ...)
end
end
|