Module: Tengine::Job::Structure::JobnetBuilder

Included in:
Runtime::Jobnet, Template::Jobnet
Defined in:
lib/tengine/job/structure/jobnet_builder.rb

Instance Method Summary collapse

Instance Method Details

#build_edges(auto_sequence, boot_job_names, redirections) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 48

def build_edges(auto_sequence, boot_job_names, redirections)
  if self.children.length == 1 # 最初に追加したStartだけなら。
    self.children.delete_all
    return
  end
  if auto_sequence || boot_job_names.empty?
    prepare_end
    build_sequencial_edges
  else
    edge_builder = Tengine::Job::Structure::EdgeBuilder.new(self, boot_job_names, redirections,
      fork_class: self.class.fork_class,
      join_class: self.class.join_class
    )
    edge_builder.process
  end
end

#build_sequencial_edgesObject



65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 65

def build_sequencial_edges
  self.edges.clear
  current = nil
  self.children.each do |child|
    next if child.is_a?(self.class.jobnet_class) && !!child.jobnet_type_entry[:alternative]
    if current
      edge = self.new_edge(current, child)
      yield(edge) if block_given?
    end
    current = child
  end
end

#child_by_name(str) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 36

def child_by_name(str)
  case str
  when '..'      then parent
  when '.'       then self
  when 'start'   then start_vertex
  when 'end'     then end_vertex
  when 'finally' then finally_vertex
  else
    self.children.detect{|c| c.respond_to?(:name) && (c.name == str)}
  end
end

#end_vertexObject



10
11
12
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 10

def end_vertex
  self.children.detect{|child| child.is_a?(self.class.end_vertex_class)}
end

#finally_vertexObject Also known as: finally_jobnet



14
15
16
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 14

def finally_vertex
  self.children.detect{|child| child.is_a?(self.class.jobnet_class) && (child.jobnet_type_key == :finally)}
end

#new_edge(origin, destination) ⇒ Object



78
79
80
81
82
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 78

def new_edge(origin, destination)
  origin_id = origin.is_a?(self.class.vertex_class) ? origin.id : origin
  destination_id = destination.is_a?(self.class.vertex_class) ? destination.id : destination
  edges.new(:origin_id => origin_id, :destination_id => destination_id)
end

#prepare_endObject



24
25
26
27
28
29
30
31
32
33
34
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 24

def prepare_end
  if self.children.last.is_a?(self.class.end_vertex_class)
    _end = self.children.last
    yield(_end) if block_given?
  else
    _end = self.class.end_vertex_class.new
    yield(_end) if block_given?
    self.children << _end
  end
  _end
end

#start_vertexObject



6
7
8
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 6

def start_vertex
  self.children.detect{|child| child.is_a?(self.class.start_vertex_class)}
end

#with_startObject



19
20
21
22
# File 'lib/tengine/job/structure/jobnet_builder.rb', line 19

def with_start
  self.children << self.class.start_vertex_class.new
  self
end