module Adaptor::Loader::ClassMethods
Public Instance Methods
Returns the adaptors registered with this loader.
@return [Array<Class>]
# File lib/adaptor/loader.rb, line 29 def adaptors @adaptors ||= [] end
Loads the first available adaptor for the given object.
@param [Array] args any arguments to pass to the adaptor's .supports?
and .new
@return [Object|NilClass] an instance of the adpator or nil if no adaptor was found
# File lib/adaptor/loader.rb, line 38 def load_adaptor(*args) adaptor_klass = adaptors.find do |klass| adaptor_supports?(klass, args) end instantiate_adaptor(adaptor_klass, args) if adaptor_klass end
Loads the first available adaptor for the given object.
@param [Array] args any arguments to pass to the adaptor's .supports?
and .new
@return [Object] an instance of the adaptor
@raise [NoAdaptorError] when no adaptor was found
# File lib/adaptor/loader.rb, line 53 def load_adaptor!(*args) load_adaptor(*args) || fail(NoAdaptorError, "No adaptor found for #{args.inspect}") end
Loads all the adaptors which support the given object.
@param [Array] args any arguments to pass to the adaptors' .supports?
and .new
@return [Array] instances of compatible adaptors
# File lib/adaptor/loader.rb, line 62 def load_adaptors(*args) adaptors.map do |adaptor_klass| next unless adaptor_supports?(adaptor_klass, args) instantiate_adaptor(adaptor_klass, args) end.compact end
Loads all the adaptors which support the given object.
@param [Array] args any arguments to pass to the adaptors' .supports?
and .new
@return [Array] instances of compatible adaptors
@raise [NoAdaptorError] when no adaptors are found
# File lib/adaptor/loader.rb, line 76 def load_adaptors!(*args) adaptors = load_adaptors(*args) adaptors.any? ? adaptors : fail(NoAdaptorError, "No adaptors found for #{args.inspect}") end
Registers one or more new adaptors with the loader.
@param [Array<Class>] klasses the adaptors to register
# File lib/adaptor/loader.rb, line 20 def register(*klasses) klasses.each do |klass| adaptors << klass unless adaptors.include?(klass) end end
Private Instance Methods
# File lib/adaptor/loader.rb, line 83 def adaptor_supports?(adaptor, args) adaptor.supports?(*cut_args(args, method: adaptor.method(:supports?))) end
# File lib/adaptor/loader.rb, line 91 def cut_args(args, method:) arity = method.arity arity.negative? ? args : args[0..(arity - 1)] end
# File lib/adaptor/loader.rb, line 87 def instantiate_adaptor(adaptor, args) adaptor.new(*cut_args(args, method: adaptor.method(:new))) end