module SmartCore::Injection::Injector::Strategies::MethodInjection

@api private @since 0.1.0

Public Class Methods

inject_class_method(injection_settings) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 21
def inject_class_method(injection_settings)
  inject_dependency(injection_settings, injection_settings.class_level_injectable)
end
inject_instance_method(injection_settings) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 12
def inject_instance_method(injection_settings)
  inject_dependency(injection_settings, injection_settings.instance_level_injectable)
end

Private Class Methods

build_injection(injection_settings, import_key, locator) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @param import_key [String, Symbol] @param locator [SmartCore::Injection::Locator] @return [Module]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 69
def build_injection(injection_settings, import_key, locator)
  Module.new do
    define_method(import_key) { locator.resolve_dependency }

    case injection_settings.access
    when :public then public(import_key)
    when :private then private(import_key)
    when :protected then protected(import_key)
    end
  end
end
build_locator(injection_settings, import_key, import_path) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @param import_key [String, Symbol] @param import_path [String] @return [SmartCore::Injection::Locator]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 49
def build_locator(injection_settings, import_key, import_path)
  SmartCore::Injection::Locator::Factory.create(injection_settings, import_key, import_path)
end
inject_dependency(injection_settings, injectable) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @param injectable [Class, Module] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 33
def inject_dependency(injection_settings, injectable)
  injection_settings.each_import do |import_key, import_path|
    locator = build_locator(injection_settings, import_key, import_path)
    process_injection_bindings(injection_settings, locator)
    injection = build_injection(injection_settings, import_key, locator)
    inject_injection(injection_settings, injection, injectable)
  end
end
inject_injection(injection_settings, injection, injectable) click to toggle source

@param injection_settings [SmartCore::Injection::Injector::InjectionSettings] @param injection [Module] @param injectable [Class, Module] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 88
def inject_injection(injection_settings, injection, injectable)
  injectable.include(injection)
end
process_injection_bindings(injection_settings, locator) click to toggle source

@param locator [SmartCore::Injection::Locator] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/strategies/method_injection.rb, line 58
def process_injection_bindings(injection_settings, locator)
  locator.bind! if injection_settings.bind_static?
end