Module: PactBroker::Client::MergePacts

Extended by:
MergePacts
Included in:
MergePacts
Defined in:
lib/pact_broker/client/merge_pacts.rb

Instance Method Summary collapse

Instance Method Details

#call(pact_hashes) ⇒ Object



12
13
14
# File 'lib/pact_broker/client/merge_pacts.rb', line 12

def call pact_hashes
  pact_hashes.reduce{|p1, p2| merge(p1, p2) }
end

#merge(original, additional) ⇒ Object

Accepts two hashes representing pacts, outputs a merged hash Does not make any guarantees about order of interactions



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/pact_broker/client/merge_pacts.rb', line 18

def merge original, additional
  new_pact = JSON.parse(original.to_json, symbolize_names: true)

  additional[:interactions].each do |new_interaction|
    # check to see if this interaction matches an existing interaction
    overwrite_index = original[:interactions].find_index do |original_interaction|
      same_description_and_state?(original_interaction, new_interaction)
    end

    # overwrite existing interaction if a match is found, otherwise appends the new interaction
    if overwrite_index
      if new_interaction == original[:interactions][overwrite_index]
        new_pact[:interactions][overwrite_index] = new_interaction
      else
        raise PactMergeError, almost_duplicate_message(original[:interactions][overwrite_index], new_interaction)
      end
    else
      new_pact[:interactions] << new_interaction
    end
  end

  new_pact
end