Class: Synapse::ProcessManager::Mongo::MongoProcessRepository
- Inherits:
-
ProcessRepository
- Object
- ProcessRepository
- Synapse::ProcessManager::Mongo::MongoProcessRepository
- Defined in:
- lib/synapse/process_manager/mongo/process_repository.rb
Overview
Implementation of a process repository that serializes process instances to an underlying MongoDB collection
Instance Attribute Summary collapse
Instance Method Summary collapse
- #add(process) ⇒ undefined
- #commit(process) ⇒ undefined
- #find(type, correlation) ⇒ Set
- #initialize(serializer, template) ⇒ undefined constructor
-
#load(id) ⇒ Process
Returns nil if process could not be found.
Constructor Details
#initialize(serializer, template) ⇒ undefined
13 14 15 16 17 |
# File 'lib/synapse/process_manager/mongo/process_repository.rb', line 13 def initialize(serializer, template) @resource_injector = ResourceInjector.new @serializer = serializer @template = template end |
Instance Attribute Details
#resource_injector ⇒ ResourceInjector
8 9 10 |
# File 'lib/synapse/process_manager/mongo/process_repository.rb', line 8 def resource_injector @resource_injector end |
Instance Method Details
#add(process) ⇒ undefined
67 68 69 70 71 |
# 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) ⇒ undefined
57 58 59 60 61 62 63 |
# 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) ⇒ Set
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# 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) ⇒ Process
Returns nil if process could not be found
44 45 46 47 48 49 50 51 52 53 |
# 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 |