class Synapse::ProcessManager::Mongo::MongoProcessRepository
Implementation of a process repository that serializes process instances to an underlying MongoDB collection
Attributes
resource_injector[RW]
@return [ResourceInjector]
Public Class Methods
new(serializer, template)
click to toggle source
@param [Serializer] serializer @param [Template] template @return [undefined]
# File lib/synapse/process_manager/mongo/process_repository.rb, line 13 def initialize(serializer, template) @resource_injector = ResourceInjector.new @serializer = serializer @template = template end
Public Instance Methods
add(process)
click to toggle source
@param [Process] process @return [undefined]
# File lib/synapse/process_manager/mongo/process_repository.rb, line 67 def add(process) if process.active? @template.process_collection.insert to_hash process end end
commit(process)
click to toggle source
@param [Process] process @return [undefined]
# File lib/synapse/process_manager/mongo/process_repository.rb, line 57 def commit(process) if process.active? @template.process_collection.save to_hash process else @template.process_collection.remove _id: process.id end end
find(type, correlation)
click to toggle source
@param [Class] type @param [Correlation] correlation @return [Set]
# File lib/synapse/process_manager/mongo/process_repository.rb, line 22 def find(type, correlation) process_type = @serializer.type_for(type).name query = { type: process_type, correlations: { key: correlation.key, value: correlation.value } } identifiers = Set.new identifiers.tap do cursor = @template.process_collection.find query cursor.each do |process| identifiers.add process.fetch '_id' end end end
load(id)
click to toggle source
@param [String] id @return [Process] Returns nil if process could not be found
# File lib/synapse/process_manager/mongo/process_repository.rb, line 44 def load(id) hash = @template.process_collection.find_one _id: id if hash document = ProcessDocument.new document.from_hash(hash).to_process(@serializer).tap do |loaded_process| @resource_injector.inject_resources(loaded_process) end end end
Private Instance Methods
to_hash(process)
click to toggle source
Marks a process's correlations as committed and converts it to a hash suitable for insertion or update in a Mongo
collection
@param [Process] process @return [Hash]
# File lib/synapse/process_manager/mongo/process_repository.rb, line 80 def to_hash(process) process.correlations.commit document = ProcessDocument.new document.from_process process, @serializer document.to_hash end