module Medicine::DI::ClassMethods

Public Instance Methods

dependencies() click to toggle source
# File lib/medicine.rb, line 93
def dependencies
  @dependencies ||= Dependencies.new
end

Private Instance Methods

dependency(name, options = {}) click to toggle source

Declare a dependency

@param [Symbol] name @param [Hash] options

@example

class MyThing
  depdendency :user_repo, default: -> { User }
end

@api public

# File lib/medicine.rb, line 110
def dependency(name, options = {})
  dependencies.add(name, options)

  define_method name do
    @injections.fetch(name) do
      self.class.dependencies.fetch(name).default do
        raise NoInjectionError, "Dependency not injected and default not declared for #{name}"
      end
    end
  end

  private name

  self
end
inherited(subclass) click to toggle source
Calls superclass method
# File lib/medicine.rb, line 126
def inherited(subclass)
  subclass.instance_variable_set("@dependencies", @dependencies)
  super
end