Class: Swarm::ConcurrenceExpression

Inherits:
BranchExpression show all
Defined in:
lib/swarm/expressions/concurrence_expression.rb

Instance Attribute Summary

Attributes inherited from HiveDweller

#hive, #id

Instance Method Summary collapse

Methods inherited from BranchExpression

#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

Constructor Details

This class inherits a constructor from Swarm::HiveDweller

Instance Method Details

#all_children_replied?Boolean

Returns:

  • (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_methodObject



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

Returns:

  • (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_childrenObject



9
10
11
# File 'lib/swarm/expressions/concurrence_expression.rb', line 9

def replied_children
  children.select(&:replied_at)
end

#workObject



5
6
7
# File 'lib/swarm/expressions/concurrence_expression.rb', line 5

def work
  kick_off_children(tree.each_index.to_a)
end