lib/faraday/rack_builder.rb in faraday-2.0.0.alpha.pre.4 vs lib/faraday/rack_builder.rb in faraday-2.0.0
- old
+ new
@@ -56,26 +56,25 @@
def build(app = nil)
klass.new(app, *@args, &@block)
end
end
- def initialize(handlers = [], adapter = nil, &block)
- @adapter = adapter
- @handlers = handlers
- if block
- build(&block)
- elsif @handlers.empty?
- # default stack, if nothing else is configured
- request :url_encoded
- self.adapter Faraday.default_adapter
- end
+ def initialize(&block)
+ @adapter = nil
+ @handlers = []
+ build(&block)
end
- def build(options = {})
+ def initialize_dup(original)
+ super
+ @adapter = original.adapter
+ @handlers = original.handlers.dup
+ end
+
+ def build
raise_if_locked
- @handlers.clear unless options[:keep]
- yield(self) if block_given?
+ block_given? ? yield(self) : request(:url_encoded)
adapter(Faraday.default_adapter) unless @adapter
end
def [](idx)
@handlers[idx]
@@ -107,11 +106,11 @@
ruby2_keywords def response(key, *args, &block)
use_symbol(Faraday::Response, key, *args, &block)
end
ruby2_keywords def adapter(klass = NO_ARGUMENT, *args, &block)
- return @adapter if klass == NO_ARGUMENT
+ 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, &block)
end
@@ -162,10 +161,11 @@
#
# Returns an object that responds to `call` and returns a Response.
def app
@app ||= begin
lock!
+ ensure_adapter!
to_app
end
end
def to_app
@@ -180,14 +180,10 @@
other.is_a?(self.class) &&
@handlers == other.handlers &&
@adapter == other.adapter
end
- def dup
- self.class.new(@handlers.dup, @adapter.dup)
- end
-
# 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
@@ -214,18 +210,25 @@
end
private
LOCK_ERR = "can't modify middleware stack after making a request"
+ MISSING_ADAPTER_ERROR = "An attempt to run a request with a Faraday::Connection without adapter has been made.\n" \
+ "Please set Faraday.default_adapter or provide one when initializing the connection.\n" \
+ 'For more info, check https://lostisland.github.io/faraday/usage/.'
def raise_if_locked
raise StackLocked, LOCK_ERR if locked?
end
def raise_if_adapter(klass)
return unless is_adapter?(klass)
raise 'Adapter should be set using the `adapter` method, not `use`'
+ end
+
+ def ensure_adapter!
+ raise MISSING_ADAPTER_ERROR unless @adapter
end
def adapter_set?
!@adapter.nil?
end