Class: Tengine::Job::Vertex
- Inherits:
-
Object
- Object
- Tengine::Job::Vertex
show all
- Includes:
- Mongoid::Document, Mongoid::Timestamps, NamePath, Signal::Transmittable
- Defined in:
- lib/tengine/job/vertex.rb
Overview
Edgeとともにジョブネットを構成するグラフの「頂点」を表すモデル 自身がツリー構造を
Defined Under Namespace
Classes: AllVisitor, AllVisitorWithEdge, AnyVisitor, VertexValidations
Constant Summary
collapse
- IGNORED_FIELD_NAMES =
["_type", "_id"].freeze
Class Method Summary
collapse
Instance Method Summary
collapse
Class Method Details
.create!(*args, &block) ⇒ Object
54
55
56
|
# File 'lib/tengine/job/vertex.rb', line 54
def create!(*args, &block)
raise_flatten_errors{ super(*args, &block) }
end
|
.flatten_errors(vertex, dest = nil) ⇒ Object
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/tengine/job/vertex.rb', line 34
def flatten_errors(vertex, dest = nil)
dest ||= []
children_errors = vertex.errors.messages.delete(:children)
edges_errors = vertex.errors.messages.delete(:edges)
vertex.errors.full_messages.each{|msg| dest << "#{vertex.name_path} #{msg}"}
vertex.children.each{|child| flatten_errors(child, dest)}
if vertex.respond_to?(:edges)
vertex.edges.each do|edge|
edge.errors.full_messages.each{|msg| dest << "#{edge.name_for_message} #{msg}"}
end
end
dest
end
|
.raise_flatten_errors ⇒ Object
48
49
50
51
52
|
# File 'lib/tengine/job/vertex.rb', line 48
def raise_flatten_errors
yield if block_given?
rescue Mongoid::Errors::Validations => e
raise VertexValidations, e.document
end
|
Instance Method Details
#accept_visitor(visitor) ⇒ Object
126
127
128
|
# File 'lib/tengine/job/vertex.rb', line 126
def accept_visitor(visitor)
visitor.visit(self)
end
|
#actual_class ⇒ Object
101
|
# File 'lib/tengine/job/vertex.rb', line 101
def actual_class; self.class; end
|
#ancestors ⇒ Object
83
84
85
86
87
88
89
|
# File 'lib/tengine/job/vertex.rb', line 83
def ancestors
if parent = self.parent
parent.ancestors + [parent]
else
[]
end
end
|
#ancestors_until_expansion ⇒ Object
91
92
93
94
95
96
97
|
# File 'lib/tengine/job/vertex.rb', line 91
def ancestors_until_expansion
if (parent = self.parent) && !self.was_expansion?
parent.ancestors_until_expansion + [parent]
else
[]
end
end
|
#generate(klass = actual_class) ⇒ Object
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
# File 'lib/tengine/job/vertex.rb', line 109
def generate(klass = actual_class)
result = klass.new(generating_attrs)
src_to_generated = {}
generating_children.each do |child|
generated = child.generate
src_to_generated[child.id] = generated.id
result.children << generated
end
generating_edges.each do |edge|
generated = edge.class.new
generated.origin_id = src_to_generated[edge.origin_id]
generated.destination_id = src_to_generated[edge.destination_id]
result.edges << generated
end
result
end
|
#generating_attrs ⇒ Object
102
103
104
105
|
# File 'lib/tengine/job/vertex.rb', line 102
def generating_attrs
field_names = self.class.fields.keys - IGNORED_FIELD_NAMES
field_names.inject({}){|d, name| d[name] = send(name); d }
end
|
#generating_children ⇒ Object
106
|
# File 'lib/tengine/job/vertex.rb', line 106
def generating_children; self.children; end
|
#generating_edges ⇒ Object
107
|
# File 'lib/tengine/job/vertex.rb', line 107
def generating_edges; respond_to?(:edges) ? self.edges : []; end
|
#next_edges ⇒ Object
74
75
76
77
|
# File 'lib/tengine/job/vertex.rb', line 74
def next_edges
return nil unless parent
parent.edges.select{|edge| edge.origin_id == self.id}
end
|
#previous_edges ⇒ Object
Also known as:
prev_edges
68
69
70
71
|
# File 'lib/tengine/job/vertex.rb', line 68
def previous_edges
return nil unless parent
parent.edges.select{|edge| edge.destination_id == self.id}
end
|
#root ⇒ Object
79
80
81
|
# File 'lib/tengine/job/vertex.rb', line 79
def root
(parent = self.parent) ? parent.root : self
end
|
#save!(*args) ⇒ Object
59
60
61
|
# File 'lib/tengine/job/vertex.rb', line 59
def save!(*args)
self.class.raise_flatten_errors{ super(*args) }
end
|
#update_attributes!(*args) ⇒ Object
62
63
64
|
# File 'lib/tengine/job/vertex.rb', line 62
def update_attributes!(*args)
self.class.raise_flatten_errors{ super(*args) }
end
|