class Dry::System::Lifecycle

Lifecycle booting DSL

Lifecycle objects are used in the boot files where you can register custom init/start/stop triggers

@see [Container.finalize]

@api private

Attributes

container[R]
opts[R]
statuses[R]
triggers[R]

Public Class Methods

cache() click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 34
def self.cache
  @cache ||= ::Concurrent::Map.new
end
new(container, opts = {}, &block) click to toggle source

@api private

Calls superclass method
# File lib/dry/system/lifecycle.rb, line 27
def self.new(container, opts = {}, &block)
  cache.fetch_or_store([container, opts, block].hash) do
    super
  end
end
new(container, opts, &block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 39
def initialize(container, opts, &block)
  @container = container
  @settings = nil
  @statuses = []
  @triggers = {}
  @opts = opts
  instance_exec(target, &block)
end

Public Instance Methods

call(*triggers) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 49
def call(*triggers)
  triggers.each do |trigger|
    unless statuses.include?(trigger)
      __send__(trigger)
      statuses << trigger
    end
  end
end
component() click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 101
def component
  opts[:component]
end
config() click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 69
def config
  component.config
end
configure(&block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 64
def configure(&block)
  component.configure(&block)
end
init(&block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 74
def init(&block)
  trigger!(:init, &block)
end
register(*args, &block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 96
def register(*args, &block)
  container.register(*args, &block)
end
settings(&block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 59
def settings(&block)
  component.settings(&block)
end
start(&block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 79
def start(&block)
  trigger!(:start, &block)
end
stop(&block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 84
def stop(&block)
  trigger!(:stop, &block)
end
target() click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 106
def target
  component.container
end
use(*names) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 89
def use(*names)
  names.each do |name|
    target.start(name)
  end
end

Private Instance Methods

method_missing(meth, *args, &block) click to toggle source

@api private

Calls superclass method
# File lib/dry/system/lifecycle.rb, line 122
def method_missing(meth, *args, &block)
  if target.registered?(meth)
    target[meth]
  elsif container.key?(meth)
    container[meth]
  elsif ::Kernel.respond_to?(meth)
    ::Kernel.public_send(meth, *args, &block)
  else
    super
  end
end
trigger!(name, &block) click to toggle source

@api private

# File lib/dry/system/lifecycle.rb, line 113
def trigger!(name, &block)
  if triggers.key?(name)
    triggers[name].(target)
  elsif block
    triggers[name] = block
  end
end