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