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
# 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) }

  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

#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



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/pact_broker/pacts/merger.rb', line 22

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