module Adaptor::Loader::ClassMethods

Public Instance Methods

adaptors() click to toggle source

Returns the adaptors registered with this loader.

@return [Array<Class>]

# File lib/adaptor/loader.rb, line 29
def adaptors
  @adaptors ||= []
end
load_adaptor(*args) click to toggle source

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
load_adaptor!(*args) click to toggle source

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
load_adaptors(*args) click to toggle source

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
load_adaptors!(*args) click to toggle source

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
register(*klasses) click to toggle source

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

adaptor_supports?(adaptor, args) click to toggle source
# File lib/adaptor/loader.rb, line 83
def adaptor_supports?(adaptor, args)
  adaptor.supports?(*cut_args(args, method: adaptor.method(:supports?)))
end
cut_args(args, method:) click to toggle source
# File lib/adaptor/loader.rb, line 91
def cut_args(args, method:)
  arity = method.arity
  arity.negative? ? args : args[0..(arity - 1)]
end
instantiate_adaptor(adaptor, args) click to toggle source
# File lib/adaptor/loader.rb, line 87
def instantiate_adaptor(adaptor, args)
  adaptor.new(*cut_args(args, method: adaptor.method(:new)))
end