Class: Synapse::ProcessManager::Mongo::MongoProcessRepository

Inherits:
ProcessRepository
  • Object
show all
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

Constructor Details

#initialize(serializer, template) ⇒ undefined

Parameters:

  • serializer (Serializer)
  • template (Template)


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_injectorResourceInjector

Returns:

  • (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

Parameters:

  • process (Process)

Returns:

  • (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

Parameters:

  • process (Process)

Returns:

  • (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

Parameters:

  • type (Class)
  • correlation (Correlation)

Returns:

  • (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

Parameters:

  • id (String)

Returns:

  • (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