class Dry::AutoInject::Strategies::Constructor

Constants

ClassMethods
InstanceMethods

Attributes

class_mod[R]
container[R]
dependency_map[R]
instance_mod[R]

Public Class Methods

new(container, *dependency_names) click to toggle source
# File lib/dry/auto_inject/strategies/constructor.rb, line 17
def initialize(container, *dependency_names)
  @container = container
  @dependency_map = DependencyMap.new(*dependency_names)
  @instance_mod = InstanceMethods.new
  @class_mod = ClassMethods.new
end

Public Instance Methods

included(klass) click to toggle source

@api private

Calls superclass method
# File lib/dry/auto_inject/strategies/constructor.rb, line 25
def included(klass)
  define_readers

  define_new
  define_initialize(klass)

  klass.send(:include, instance_mod)
  klass.extend(class_mod)

  super
end

Private Instance Methods

define_initialize(klass) click to toggle source
# File lib/dry/auto_inject/strategies/constructor.rb, line 50
def define_initialize(klass)
  raise NotImplementedError, 'must be implemented by a subclass'
end
define_new() click to toggle source
# File lib/dry/auto_inject/strategies/constructor.rb, line 46
def define_new
  raise NotImplementedError, 'must be implemented by a subclass'
end
define_readers() click to toggle source
# File lib/dry/auto_inject/strategies/constructor.rb, line 39
        def define_readers
          instance_mod.class_eval <<-RUBY, __FILE__, __LINE__ + 1
            attr_reader #{dependency_map.names.map { |name| ":#{name}" }.join(', ')}
          RUBY
          self
        end