Class: Justdi::Container

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/justdi/container.rb

Overview

Generic container

Class Attribute Summary collapse

Instance Method Summary collapse

Class Attribute Details

.resolver ⇒ Module<Justdi::Resolver>

Resolver module

Returns:



15
16
17
# File 'lib/justdi/container.rb', line 15

def resolver
  @resolver ||= Justdi::Resolver
end

.store ⇒ Class<Justdi::DefinitionStore>

Class for generation

Returns:



21
22
23
# File 'lib/justdi/container.rb', line 21

def store
  @store ||= Justdi::DefinitionStore
end

Instance Method Details

#[](token) ⇒ *

Short getting syntax

Parameters:

  • token (String, Symbol, Numeric, Class)

Returns:

  • (*)


46
47
48
# File 'lib/justdi/container.rb', line 46

def [](token)
  get(token)
end

#get(token) ⇒ *

Load and resolve dependency

Parameters:

  • token (String, Symbol, Numeric, Class)

Returns:

  • (*)


37
38
39
40
41
# File 'lib/justdi/container.rb', line 37

def get(token)
  store.get(token)&.resolve do |definition|
    self.class.resolver.call definition, self
  end
end

#import_store(def_store, overwrite: true) ⇒ Object

Import definition store

Parameters:



69
70
71
72
73
74
75
# File 'lib/justdi/container.rb', line 69

def import_store(def_store, overwrite: true)
  return store.merge(def_store) if overwrite

  def_store.each do |key, value|
    store.set(key, value) unless store.has?(key)
  end
end

#merge(*containers) ⇒ Object

Merge containers

Parameters:



61
62
63
# File 'lib/justdi/container.rb', line 61

def merge(*containers)
  containers.each { |container| store.merge container.store }
end

#resolve(klass) ⇒ T

Resolve dependency

Parameters:

  • klass (Class<T>)

Returns:

  • (T)


54
55
56
# File 'lib/justdi/container.rb', line 54

def resolve(klass)
  self.class.resolver.class_value(klass, self)
end