Module: GraphAgent::Reducers

Defined in:
lib/graph_agent/reducers.rb

Constant Summary collapse

ADD =
->(a, b) { a + b }
MERGE =
->(a, b) { a.merge(b) }
REPLACE =
->(_, b) { b }
APPEND =
->(a, b) { Array(a) + Array(b) }

Class Method Summary collapse

Class Method Details

.add_messages(existing, new_messages) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/graph_agent/reducers.rb', line 12

def add_messages(existing, new_messages)
  existing = Array(existing)
  new_messages = Array(new_messages)

  existing_by_id = {}
  existing.each_with_index do |msg, idx|
    if msg.is_a?(Hash) && msg[:id]
      existing_by_id[msg[:id]] = idx
    end
  end

  result = existing.dup
  new_messages.each do |msg|
    if msg.is_a?(Hash) && msg[:id] && existing_by_id.key?(msg[:id])
      result[existing_by_id[msg[:id]]] = msg
    else
      result << msg
    end
  end
  result
end