--- /dev/null
+module Faraday
+ class Middleware
+ extend MiddlewareRegistry
+
+ class << self
+ attr_accessor :load_error
+ private :load_error=
+ end
+
+ self.load_error = nil
+
+ # Executes a block which should try to require and reference dependent libraries
+ def self.dependency(lib = nil)
+ lib ? require(lib) : yield
+ rescue LoadError, NameError => error
+ self.load_error = error
+ end
+
+ def self.new(*)
+ raise "missing dependency for #{self}: #{load_error.message}" unless loaded?
+ super
+ end
+
+ def self.loaded?
+ load_error.nil?
+ end
+
+ def self.inherited(subclass)
+ super
+ subclass.send(:load_error=, self.load_error)
+ end
+
+ def initialize(app = nil)
+ @app = app
+ end
+ end
+end