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