class SmartCore::Injection::Injector

@api private @since 0.1.0

Attributes

injectable[R]

@return [Class, Module]

@api private @since 0.1.0

linked_containers[R]

@return [Array<SmartCore::Container>]

@api private @since 0.1.0

Public Class Methods

new(injectable) click to toggle source

@param injectable [Class, Module] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 16
def initialize(injectable)
  @injectable = injectable
  @linked_containers = SmartCore::Injection::Injector::ContainerSet.new
  @access_lock = SmartCore::Engine::Lock.new
end

Public Instance Methods

associated_containers() click to toggle source

@return [Array<SmartCore::Container>]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 61
def associated_containers
  thread_safe { linked_containers.list }
end
duplicate_for(another_injectable) click to toggle source

@param another_injectable [Class, Module] @return [SmartCore::Injection::Injector]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 70
def duplicate_for(another_injectable)
  thread_safe { create_duplicate(another_injectable) }
end
inject(imports, memoize, access, bind, from) click to toggle source

@param imports [Hash<String|Symbol,String>] @param memoize [Boolean] @param access [Symbol] @param bind [Symbol] @param from [NilClass, SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 31
def inject(imports, memoize, access, bind, from)
  thread_safe { inject_instance_method(imports, memoize, access, bind, from) }
end
inject_static(imports, memoize, access, bind, from) click to toggle source

@param imports [Hash<String|Symbol,String>] @param memoize [Boolean] @param access [Symbol] @param bind [Symbol] @param from [NilClass, SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 44
def inject_static(imports, memoize, access, bind, from)
  thread_safe { inject_class_method(imports, memoize, access, bind, from) }
end
register_container(*containers) click to toggle source

@param containers [Array<SmartCore::Container>] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 53
def register_container(*containers)
  thread_safe { link_container(containers) }
end

Private Instance Methods

create_duplicate(another_injectable) click to toggle source

@param another_injectable [Class, Module] @return [SmartCore::Injection::Injector]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 93
def create_duplicate(another_injectable)
  self.class.new(another_injectable).tap do |duplicate|
    linked_containers.each do |container|
      duplicate.register_container(container)
    end
  end
end
inject_class_method(imports, memoize, access, bind, from) click to toggle source

@param imports [Hash<String|Symbol,String>] @param memoize [Boolean] @param access [Symbol] @param bind [Symbol] @param from [NilClass, SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 133
def inject_class_method(imports, memoize, access, bind, from)
  SmartCore::Injection::Injector::Strategies::MethodInjection.inject_class_method(
    SmartCore::Injection::Injector::InjectionSettings.new(
      injectable,
      linked_containers,
      imports,
      memoize: memoize,
      access: access,
      bind: bind,
      from: from
    )
  )
end
inject_instance_method(imports, memoize, access, bind, from) click to toggle source

@param imports [Hash<String|Symbol,String>] @param memoize [Boolean] @param access [Symbol] @param bind [Symbol] @param from [NilClass, SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 110
def inject_instance_method(imports, memoize, access, bind, from)
  SmartCore::Injection::Injector::Strategies::MethodInjection.inject_instance_method(
    SmartCore::Injection::Injector::InjectionSettings.new(
      injectable,
      linked_containers,
      imports,
      memoize: memoize,
      access: access,
      bind: bind,
      from: from
    )
  )
end
thread_safe(&block) click to toggle source

@return [Any]

@api private @since 0.1.0

# File lib/smart_core/injection/injector.rb, line 162
def thread_safe(&block)
  @access_lock.synchronize(&block)
end