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