class PactBroker::Pacts::Content

Attributes

pact_hash[R]

Public Class Methods

from_hash(pact_hash) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 20
def self.from_hash pact_hash
  new(pact_hash)
end
from_json(json_content) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 16
def self.from_json json_content
  new(Parse.call(json_content))
end
new(pact_hash) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 12
def initialize pact_hash
  @pact_hash = pact_hash
end

Public Instance Methods

content_that_affects_verification_results() click to toggle source

Half thinking this belongs in GenerateSha

# File lib/pact_broker/pacts/content.rb, line 99
def content_that_affects_verification_results
  if interactions || messages
    cont = {}
    cont["interactions"] = interactions if interactions
    cont["messages"] = messages if messages
    cont["pact_specification_version"] = pact_specification_version if pact_specification_version
    cont
  else
    pact_hash
  end
end
interaction_ids() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 92
def interaction_ids
  messages_or_interaction_or_empty_array.collect do | interaction |
    interaction["_id"]
  end.compact
end
interactions() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 115
def interactions
  pact_hash.is_a?(Hash) && pact_hash["interactions"].is_a?(Array) ? pact_hash["interactions"] : nil
end
interactions_missing_test_results() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 36
def interactions_missing_test_results
  return [] unless messages_or_interactions
  messages_or_interactions.reject do | interaction |
    interaction["tests"]&.any?
  end
end
messages() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 111
def messages
  pact_hash.is_a?(Hash) && pact_hash["messages"].is_a?(Array) ? pact_hash["messages"] : nil
end
messages_or_interaction_or_empty_array() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 123
def messages_or_interaction_or_empty_array
  messages_or_interactions || []
end
messages_or_interactions() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 119
def messages_or_interactions
  messages || interactions
end
pact_specification_version() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 127
def pact_specification_version
  maybe_pact_specification_version_1 = pact_hash["metadata"]["pactSpecification"]["version"] rescue nil
  maybe_pact_specification_version_2 = pact_hash["metadata"]["pact-specification"]["version"] rescue nil
  maybe_pact_specification_version_3 = pact_hash["metadata"] && pact_hash["metadata"]["pactSpecificationVersion"] rescue nil
  maybe_pact_specification_version_1 || maybe_pact_specification_version_2 || maybe_pact_specification_version_3
end
sort() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 32
def sort
  Content.from_hash(SortContent.call(pact_hash))
end
to_hash() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 24
def to_hash
  pact_hash
end
to_json() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 28
def to_json
  pact_hash.to_json
end
with_ids(overwrite_existing_id = true) click to toggle source

rubocop: enable Metrics/CyclomaticComplexity

# File lib/pact_broker/pacts/content.rb, line 68
def with_ids(overwrite_existing_id = true)
  new_pact_hash = pact_hash.dup
  if interactions && interactions.is_a?(Array)
    new_pact_hash["interactions"] = add_ids(interactions, overwrite_existing_id)
  end

  if messages && messages.is_a?(Array)
    new_pact_hash["messages"] = add_ids(messages, overwrite_existing_id)
  end
  Content.from_hash(new_pact_hash)
end
with_test_results(test_results) click to toggle source

rubocop: disable Metrics/CyclomaticComplexity

# File lib/pact_broker/pacts/content.rb, line 44
def with_test_results(test_results)
  # new format
  if test_results.is_a?(Array)
    tests = test_results
  else
    # old format
    tests = test_results && test_results["tests"]
    if tests.nil? || !tests.is_a?(Array) || tests.empty?
      tests = []
    end
  end

  new_pact_hash = pact_hash.dup
  if interactions && interactions.is_a?(Array)
    new_pact_hash["interactions"] = merge_verification_results(interactions, tests)
  end

  if messages && messages.is_a?(Array)
    new_pact_hash["messages"] = merge_verification_results(messages, tests)
  end
  Content.from_hash(new_pact_hash)
end
without_ids() click to toggle source
# File lib/pact_broker/pacts/content.rb, line 80
def without_ids
  new_pact_hash = pact_hash.dup
  if interactions && interactions.is_a?(Array)
    new_pact_hash["interactions"] = remove_ids(interactions)
  end

  if messages && messages.is_a?(Array)
    new_pact_hash["messages"] = remove_ids(messages)
  end
  Content.from_hash(new_pact_hash)
end

Private Instance Methods

add_ids(interactions, overwrite_existing_id) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 138
def add_ids(interactions, overwrite_existing_id)
  interactions.map do | interaction |
    if interaction.is_a?(Hash)
      if !interaction.key?("_id") || overwrite_existing_id
        # just in case there is a previous ID in there
        interaction_without_id = interaction.reject { |k, _| k == "_id" }
        # make the _id the first key in the hash when rendered to JSON
        { "_id" => generate_interaction_sha(interaction_without_id) }.merge(interaction)
      else
        interaction
      end
    else
      interaction
    end
  end
end
description_and_state_match(interaction, test) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 176
def description_and_state_match(interaction, test)
  test["interactionDescription"] && test["interactionDescription"] == interaction["description"] && test["interactionProviderState"] == interaction["providerState"]
end
interaction_ids_match(interaction, test) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 172
def interaction_ids_match(interaction, test)
  interaction["_id"] && interaction["_id"] == test["interactionId"]
end
merge_verification_results(interactions, tests) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 159
def merge_verification_results(interactions, tests)
  interactions.collect(&:dup).collect do | interaction |
    interaction["tests"] = tests.select do | test |
      test_is_for_interaction(interaction, test)
    end
    interaction
  end
end
remove_ids(interactions_or_messages) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 155
def remove_ids(interactions_or_messages)
  interactions_or_messages.collect{ | h | h.without("_id") }
end
test_is_for_interaction(interaction, test) click to toggle source
# File lib/pact_broker/pacts/content.rb, line 168
def test_is_for_interaction(interaction, test)
  test.is_a?(Hash) && interaction.is_a?(Hash) && ( interaction_ids_match(interaction, test) || description_and_state_match(interaction, test))
end