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