class Synapse::ProcessManager::MappingProcessManager

Process manager that is aware of processes that use the mapping DSL @see MappingProcess

Public Class Methods

new(repository, factory, lock_manager, *process_types) click to toggle source

@raise [ArgumentError] If a process type is given that doesn't support the mapping DSL @param [ProcessRepository] repository @param [ProcessFactory] factory @param [LockManager] lock_manager @param [Class…] process_types @return [undefined]

Calls superclass method
# File lib/synapse/process_manager/mapping/process_manager.rb, line 12
def initialize(repository, factory, lock_manager, *process_types)
  super

  @process_types.each do |process_type|
    unless process_type.respond_to? :event_mapper
      raise ArgumentError, 'Incompatible process type %s' % process_type
    end
  end
end

Protected Instance Methods

creation_policy_for(process_type, event) click to toggle source

@param [Class] process_type @param [EventMessage] event @return [Symbol]

# File lib/synapse/process_manager/mapping/process_manager.rb, line 27
def creation_policy_for(process_type, event)
  mapping = process_type.event_mapper.mapping_for event.payload_type

  if mapping
    if !mapping.options[:start]
      :none
    elsif mapping.options[:force_new]
      :always
    else
      :if_none_found
    end
  end
end
extract_correlation(process_type, event) click to toggle source

@param [Class] process_type @param [EventMessage] event @return [Correlation] Returns nil if no correlation could be extracted

# File lib/synapse/process_manager/mapping/process_manager.rb, line 44
def extract_correlation(process_type, event)
  mapping = process_type.event_mapper.mapping_for event.payload_type

  return unless mapping

  correlation_key = mapping.options[:correlate]
  if correlation_key
    correlation_value event.payload, correlation_key
  end
end

Private Instance Methods

correlation_value(payload, correlation_key) click to toggle source

@param [Object] payload @param [Symbol] correlation_key @return [Correlation] Returns nil if correlation value could not be extracted

# File lib/synapse/process_manager/mapping/process_manager.rb, line 60
def correlation_value(payload, correlation_key)
  unless payload.respond_to? correlation_key
    raise 'Correlation key [%s] is not valid for [%s]' % [correlation_key, payload.class]
  end

  value = payload.public_send correlation_key
  if value
    Correlation.new correlation_key, value
  end
end