Module: Tengine::Job::Structure::JobnetFinder

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

Instance Method Summary collapse

Instance Method Details

#find_descendant(vertex_id) ⇒ Object



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

def find_descendant(vertex_id)
  vertex_id = String(vertex_id)
  return nil if vertex_id == self.id.to_s
  vertex(vertex_id)
end

#find_descendant_by_name_path(name_path) ⇒ Object



31
32
33
34
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 31

def find_descendant_by_name_path(name_path)
  return nil if name_path == self.name_path
  vertex_by_name_path(name_path)
end

#find_descendant_edge(edge_id) ⇒ Object Also known as: edge



5
6
7
8
9
10
11
12
13
14
15
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 5

def find_descendant_edge(edge_id)
  edge_id = String(edge_id)
  visitor = Tengine::Job::Structure::Visitor::Any.new do |vertex|
    if vertex.respond_to?(:edges)
      vertex.edges.detect{|edge| edge.id.to_s == edge_id}
    else
      nil
    end
  end
  visitor.visit(self)
end

#vertex(vertex_id) ⇒ Object



24
25
26
27
28
29
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 24

def vertex(vertex_id)
  vertex_id = String(vertex_id)
  return self if vertex_id == self.id.to_s
  visitor = Tengine::Job::Structure::Visitor::Any.new{|v| vertex_id == v.id.to_s ? v : nil }
  visitor.visit(self)
end

#vertex_by_absolute_name_path(name_path) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 42

def vertex_by_absolute_name_path(name_path)
  return self if name_path.to_s == self.name_path
  visitor = Tengine::Job::Structure::Visitor::Any.new do |vertex|
    if name_path == (vertex.respond_to?(:name_path) ? vertex.name_path : nil)
      vertex
    else
      nil
    end
  end
  visitor.visit(self)
end

#vertex_by_name_path(name_path) ⇒ Object



36
37
38
39
40
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 36

def vertex_by_name_path(name_path)
  Tengine::Job::Structure::NamePath.absolute?(name_path) ?
    root.vertex_by_absolute_name_path(name_path) :
    vertex_by_relative_name_path(name_path)
end

#vertex_by_relative_name_path(name_path) ⇒ Object



54
55
56
57
58
# File 'lib/tengine/job/structure/jobnet_finder.rb', line 54

def vertex_by_relative_name_path(name_path)
  head, tail = *name_path.split(Tengine::Job::Structure::NamePath::SEPARATOR, 2)
  child = child_by_name(head)
  tail ? child.vertex_by_relative_name_path(tail) : child
end