class Celluloid::Supervision::Configuration

Constants

INJECTIONS
REMOVE_AT_EXPORT

These are applied inside Supervision::Member ################

Attributes

instances[RW]

Public Class Methods

alias!(aliased, original) click to toggle source
# File lib/celluloid/supervision/constants.rb, line 94
def alias!(aliased, original)
  @@aliases[aliased] = original
end
aliases() click to toggle source
# File lib/celluloid/supervision/constants.rb, line 90
def aliases
  @@aliases
end
arity() click to toggle source
# File lib/celluloid/supervision/constants.rb, line 82
def arity
  @@arity
end
arity!(key, value) click to toggle source
# File lib/celluloid/supervision/constants.rb, line 86
def arity!(key, value)
  @@arity[key] = value
end
define(options = {}) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 9
def define(options = {})
  new(options)
end
deploy(options = {}) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 5
def deploy(options = {})
  define(options).deploy
end
new(options = {}) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 28
def initialize(options = {})
  @instances = [Instance.new]
  @branch = :services
  @i = 0 # incrementer of instances in this branch
  resync_accessors
  @configuration = options

  if options.is_a? Hash
    options[:configuration] ||= Container::Behavior.configure(options)
    @configuration = instance_eval(&options[:configuration])
    @supervisor ||= @configuration.fetch(:supervisor, :"Celluloid.services")
  end
  @supervisor ||= :"Celluloid.services"

  define(@configuration) if (@configuration.is_a?(Hash) || @configuration.is_a?(Array)) && @configuration.any?
end
options(config = {}, options = {}) click to toggle source
# File lib/celluloid/supervision/validation.rb, line 30
def options(config = {}, options = {})
  configuration = config.merge(options)
  return configuration if configuration.is_a? Configuration
  configuration[:configuration] = Container::Behavior.configure(configuration)
  valid?(configuration, true)
  configuration
end
parameter!(key, value) click to toggle source
# File lib/celluloid/supervision/constants.rb, line 78
def parameter!(key, value)
  @@parameters[key] << value unless @@parameters[key].include? value
end
parameters(*args) click to toggle source
# File lib/celluloid/supervision/constants.rb, line 74
def parameters(*args)
  args.inject([]) { |parameters, p| parameters += @@parameters[p]; parameters }
end
resync_parameters() click to toggle source
# File lib/celluloid/supervision/constants.rb, line 68
def resync_parameters
  @@parameters = @@defaults[:parameters].each_with_object({}) { |(k, v), p| p[k] = v.dup; }
  @@aliases = @@defaults[:aliases].dup
  @@arity = @@defaults[:arity].dup
end
save_defaults() click to toggle source
# File lib/celluloid/supervision/constants.rb, line 60
def save_defaults
  @@defaults = {
    parameters: @@parameters.each_with_object({}) { |(k, v), p| p[k] = v.dup; },
    aliases: @@aliases.dup,
    arity: @@arity.dup
  }
end
valid?(configuration, fails = false) click to toggle source
# File lib/celluloid/supervision/validation.rb, line 5
def valid?(configuration, fails = false)
  parameters(:mandatory).each do |k|
    unless configuration.key? k
      if fails
        raise Error::Incomplete, "Missing `:#{k}` in supervision configuration."
      else
        return false
      end
    end
  end
  arity.each do |klass, args|
    next if configuration[args].is_a? Proc
    __a = configuration[args] && configuration[args].count || 0
    __arity = configuration[klass].allocate.method(:initialize).arity
    unless (__arity < 0 && __a >= __arity.abs - 1) || __a == __arity.abs
      if fails
        raise ArgumentError, "#{__a} vs. #{__arity}"
      else
        return false
      end
    end
  end
  true
end

Public Instance Methods

add(options) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 149
def add(options)
  define(options)
  provider.supervise options if Configuration.valid? options
end
another()
Alias for: increment
count() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 68
def count
  @instances.count
end
define(configuration, fail = false) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 128
def define(configuration, fail = false)
  if configuration.is_a? Array
    configuration.each { |c| define(c, fail) }
  else
    unless include? configuration[:as]
      begin
        current_instance.define(configuration, fail)
      rescue Error::AlreadyDefined
        increment
        retry
      end
    end
  end
  self
end
deploy(options = {}) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 60
def deploy(options = {})
  define(options) if options.any?
  @instances.each do |instance|
    provider.add instance.merge(branch: @branch)
  end
  provider
end
each(&block) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 72
def each(&block)
  @instances.each(&block)
end
export() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 119
def export
  return current_instance.to_hash if @i == 0
  @instances.map(&:export)
end
include?(name) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 124
def include?(name)
  @instances.map(&:name).include? name
end
increment() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 144
def increment
  @i += 1
end
Also aliased as: another
merge(values) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 111
def merge(values)
  if values.is_a?(Configuration) || values.is_a?(Hash)
    current_instance.merge(values)
  else
    raise Error::Invalid
  end
end
merge!(values) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 103
def merge!(values)
  if values.is_a?(Configuration) || values.is_a?(Hash)
    current_instance.merge!(values)
  else
    raise Error::Invalid
  end
end
provider() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 45
def provider
  @provider ||= if @supervisor.is_a? Hash
                  @supervisor[:type].run!(@supervisor)
                elsif @supervisor.is_a? Symbol
                  @supervisor = Object.module_eval(@supervisor.to_s)
                  provider
                elsif @supervisor.is_a? Class
                  @supervisor.run!
                elsif @supervisor.respond_to? :supervise
                  @supervisor
                else
                  raise Error::InvalidSupervisor
                end
end
resync_accessors() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 76
def resync_accessors
  # methods for setting and getting the usual defaults
  Configuration.parameters(:mandatory, :optional, :plugins, :meta).each do |key|
    [:"#{key}!", :"#{key}="].each do |m|
      self.class.instance_eval do
        remove_method :"#{m}" rescue nil # avoid warnings in tests
        define_method(m) { |p| current_instance.send(m, p) }
      end
    end
    [:"#{key}?", :"#{key}"].each do |m|
      self.class.instance_eval do
        remove_method :"#{m}" rescue nil # avoid warnings in tests
        define_method(m) { current_instance.send(m) }
      end
    end
  end

  Configuration.aliases.each do |_alias, _original|
    ["!", :"=", :"?", :""]. each do |m|
      self.class.instance_eval do
        remove_method :"#{_alias}#{m}" rescue nil # avoid warnings in tests
        alias_method :"#{_alias}#{m}", :"#{_original}#{m}"
      end
    end
  end
end
shutdown() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 154
def shutdown
  @provider.shutdown
end

Private Instance Methods

current_instance() click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 160
def current_instance
  @instances[@i] ||= Instance.new
end
invoke_injection(_point) click to toggle source
# File lib/celluloid/supervision/configuration.rb, line 164
def invoke_injection(_point)
  # de puts "injection? #{point}"
end