Module: Tengine::Job::Structure::JobnetBuilder
- Included in:
- Runtime::Jobnet, Template::Jobnet
- Defined in:
- lib/tengine/job/structure/jobnet_builder.rb
Instance Method Summary collapse
- #build_edges(auto_sequence, boot_job_names, redirections) ⇒ Object
- #build_sequencial_edges ⇒ Object
- #child_by_name(str) ⇒ Object
- #end_vertex ⇒ Object
- #finally_vertex ⇒ Object (also: #finally_jobnet)
- #new_edge(origin, destination) ⇒ Object
- #prepare_end ⇒ Object
- #start_vertex ⇒ Object
- #with_start ⇒ Object
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_edges ⇒ Object
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_vertex ⇒ Object
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_vertex ⇒ Object 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_end ⇒ Object
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_vertex ⇒ Object
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_start ⇒ Object
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 |