Class: Dio::LoaderFactory
- Inherits:
-
Object
- Object
- Dio::LoaderFactory
- Defined in:
- lib/dio/loader_factory.rb
Overview
LoaderFactory creates Loader. This also allows you to customize dependency loading.
Defined Under Namespace
Classes: Loader
Instance Method Summary collapse
- #create(container, target) ⇒ Object
-
#initialize ⇒ LoaderFactory
constructor
A new instance of LoaderFactory.
-
#reset_loader(clazz = nil) ⇒ Object
(also: #clear_stubs)
Removes load wrappers registered via #wrap_load or #stub_deps.
-
#stub_deps(clazz, deps) ⇒ Object
Registers a mock dependencies for a given class.
-
#wrap_load(clazz, &wrapper) { ... } ⇒ Object
Registers a process which wraps loading.
Constructor Details
#initialize ⇒ LoaderFactory
Returns a new instance of LoaderFactory.
9 10 11 |
# File 'lib/dio/loader_factory.rb', line 9 def initialize @wrappers = {} end |
Instance Method Details
#create(container, target) ⇒ Object
13 14 15 16 |
# File 'lib/dio/loader_factory.rb', line 13 def create(container, target) loader = loader_for(target, container) Loader.new(loader) end |
#reset_loader(clazz = nil) ⇒ Object Also known as: clear_stubs
Removes load wrappers registered via #wrap_load or #stub_deps. If you specify a class, only the wrappers for the class are removed.
52 53 54 55 56 |
# File 'lib/dio/loader_factory.rb', line 52 def reset_loader(clazz = nil) return @wrappers.delete(clazz) if clazz @wrappers = {} nil end |
#stub_deps(clazz, deps) ⇒ Object
Registers a mock dependencies for a given class. When a registered dependency is loaded, the mock is returned instead of the actual one. This uses #wrap_load internally.
40 41 42 43 44 45 46 |
# File 'lib/dio/loader_factory.rb', line 40 def stub_deps(clazz, deps) wrap_load(clazz) do |ctx| dep = deps[ctx.key] next ctx.load unless dep dep.respond_to?(:is_a?) && dep.is_a?(Proc) ? dep.call(*ctx.args) : dep end end |
#wrap_load(clazz, &wrapper) { ... } ⇒ Object
Registers a process which wraps loading. Wrappers are run only when a given class is a target of injection.
29 30 31 |
# File 'lib/dio/loader_factory.rb', line 29 def wrap_load(clazz, &wrapper) @wrappers[clazz] = wrapper end |