Adapter Registry
provides a generic registry for traits and classes, where a class adapter can be stored and recalled in the correct context.
Installation
$ gem install adapter-registry
require 'adapter-registry'
or use gem 'adapter-registry'
in your Gemfile when using bundler.
Examples
Implementing Adapters
require 'adapter-registry'
class SomeClass
end
class SomeOtherClass < SomeClass
end
class SomeAdapter
include AdapterRegistry::Implementation
implements :something # trait, defines the lookup context
adapts_instance SomeClass # stores the trait/class combination in the registry
#...
end
class SomeClassAdapter
include AdapterRegistry::Implementation
implements :something
adapts_class SomeClass # stores the trait/class or ancestor combination in the registry
#...
end
Initialization
require 'adapter-registry'
AdapterRegistry.load_directories(['./lib/some_adapters', './lib/some_other_adapters'])
The load
section should be used in an initializer when using Rails. adapter-registry
uses require_dependency
in favour of require
when included in a Rails context.
Usage
obj = SomeClass.new
adapter = AdapterRegistry.get(:something, obj)
class_adapter = AdapterRegistry.get(:something, SomeOtherClass)
some_other_instance = class_adapter.new # uses the same adapter because SomeClass is an ancestor