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