Class: Swarm::ConcurrenceExpression
Instance Attribute Summary
Attributes inherited from HiveDweller
#hive, #id
Instance Method Summary
collapse
#add_and_apply_child, #add_child, #create_child_expression, #kick_off_children
Methods inherited from Expression
#_apply, #_reply, #apply, #arguments, #branch_position, #command, #evaluator, inherited, #meets_conditions?, #node, #node_at_position, #parent, #replied?, #replied_at, #reply, #reply_to_parent, #root?, storage_type, #tree
Methods inherited from HiveDweller
#==, all, #attributes, #change_attribute, #changed?, create, #delete, each, fetch, ids, inherited, #initialize, many_to_one, #new?, new_from_storage, one_to_many, #reload!, #save, #set_attributes, set_columns, #storage, #storage_id, storage_id_for_key, storage_type, #to_hash
Instance Method Details
#all_children_replied? ⇒ Boolean
19
20
21
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 19
def all_children_replied?
replied_children.count == tree.size
end
|
#array_combination_method ⇒ Object
37
38
39
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 37
def array_combination_method
arguments.fetch("combine_arrays", "uniq")
end
|
#merge_child_workitem(child) ⇒ Object
31
32
33
34
35
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 31
def merge_child_workitem(child)
self.workitem = Swarm::Support.deep_merge(
workitem, child.workitem, :combine_arrays => array_combination_method
)
end
|
#move_on_from(child) ⇒ Object
23
24
25
26
27
28
29
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 23
def move_on_from(child)
merge_child_workitem(child)
save
if all_children_replied?
reply
end
end
|
#ready_to_proceed? ⇒ Boolean
13
14
15
16
17
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 13
def ready_to_proceed?
required_replies = arguments.fetch("required_replies", nil)
return all_children_replied? unless required_replies
replied_children.count >= required_replies
end
|
#replied_children ⇒ Object
9
10
11
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 9
def replied_children
children.select(&:replied_at)
end
|
#work ⇒ Object
5
6
7
|
# File 'lib/swarm/expressions/concurrence_expression.rb', line 5
def work
kick_off_children(tree.each_index.to_a)
end
|