module Helium::Dependency::ClassMethods

Public Instance Methods

dependencies() click to toggle source
# File lib/helium/dependency.rb, line 42
def dependencies
  @dependencies ||= []
end
dependency(name, public: false, &default_block) click to toggle source
# File lib/helium/dependency.rb, line 32
def dependency(name, public: false, &default_block)
  dependencies << name

  define_method(name) do
    @deps[name] ||= instance_exec(&default_block)
  end

  private(name) unless public
end
new(*args, **kwargs, &block) click to toggle source
# File lib/helium/dependency.rb, line 12
def new(*args, **kwargs, &block)
  instance = allocate

  deps = {}
  dependencies.each do |dep|
    next unless kwargs.key?(dep)
    deps[dep] = kwargs.delete(dep)
  end

  instance.instance_variable_set(:@deps, deps)

  if kwargs.any?
    instance.send :initialize, *args, **kwargs, &block
  else
    instance.send :initialize, *args, &block
  end

  instance
end