Module Dissident::Lifecycle
In: dissident/lifecycle.rb

Dissident::Lifecycle provides lifecycle management for Dissident.

It redefines the provide and inject methods of Dissident to keep track of the services the klasses need.

To use Dissident::Lifecycle, include it into your container. Dissident::Lifecycle uses ducktyping to figure out interfaces. Classes that can be started and stopped need to define methods both methods, start and stop. Classes that can be disposed need to implement dispose.

Example:

  class SampleContainer < Dissident::Container
    include Dissident::Lifecycle

    provide :database, Database
    provide :logger, Logger
    provide :helper, Helper
  end

  Dissident.with SampleContainer do |container|
    container.start :database
    ...
    container.stop :database
    container.dispose :database
  end

Methods

dispose   start   stop  

Public Instance methods

Call dispose on klass and all dependencies of klass that support it.

[Source]

    # File dissident/lifecycle.rb, line 83
83:   def dispose(klass)
84:     fetch(klass).dispose  rescue nil
85:     a = []
86:     find_dependencies(klass, ["dispose"]) { |s| a << s }
87:     a.reverse_each { |s| fetch(s).dispose }
88:   end

Call start on all dependencies of klass that support it and klass.

[Source]

    # File dissident/lifecycle.rb, line 67
67:   def start(klass)
68:     find_dependencies(klass, ["start", "stop"]) { |s| fetch(s).start }
69:     fetch(klass).start  rescue nil
70:   end

Call stop on klass and all dependencies of klass that support it.

[Source]

    # File dissident/lifecycle.rb, line 74
74:   def stop(klass)
75:     fetch(klass).stop  rescue nil
76:     a = []
77:     find_dependencies(klass, ["start", "stop"]) { |s| a << s }
78:     a.reverse_each { |s| fetch(s).stop }
79:   end

[Validate]