Module: PactBroker::Pacts::Merger

Extended by:
Merger
Included in:
Merger
Defined in:
lib/pact_broker/pacts/merger.rb

Instance Method Summary collapse

Instance Method Details

#conflict?(original_json, additional_json) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/pact_broker/pacts/merger.rb', line 9

def conflict? original_json, additional_json
  original, additional = [original_json, additional_json].map{|str| JSON.parse(str, PACT_PARSING_OPTIONS) }

  if original["interactions"].nil? || additional["interactions"].nil?
    true
  else
    additional["interactions"].any? do |new_interaction|
      original["interactions"].any? do |original_interaction|
        same_description_and_state?(original_interaction, new_interaction) &&
          !same_request_properties?(original_interaction["request"], new_interaction["request"])
      end
    end
  end
end

#merge_pacts(original_json, additional_json) ⇒ Object

Accepts two hashes representing pacts, outputs a merged hash Does not make any guarantees about order of interactions TODO: should not modify original! TODO: is not checking response for equality! TODO: should have separate tests!



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/pact_broker/pacts/merger.rb', line 29

def merge_pacts original_json, additional_json
  original, additional = [original_json, additional_json].map{|str| JSON.parse(str, PACT_PARSING_OPTIONS) }

  new_pact = original

  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
      new_pact["interactions"][overwrite_index] = new_interaction
    else
      new_pact["interactions"] << new_interaction
    end
  end

  new_pact.to_json
end