Module: PactBroker::Pacts::Metadata

Extended by:
Metadata
Included in:
Api::Decorators::VerifiablePactDecorator, Api::PactBrokerUrls, Metadata
Defined in:
lib/pact_broker/pacts/metadata.rb

Constant Summary collapse

MAPPINGS =
[
  [:consumer_version_tags, "cvt"],
  [:consumer_version_number, "cvn"],
  [:wip, "w"],
  [:consumer_version_selectors, "s"],
  [:tag, "t"],
  [:latest, "l"]
]

Instance Method Summary collapse

Instance Method Details

#build_metadata_for_latest_pact(pact, selection_parameters) ⇒ Object

When verifying a pact at /…/latest/TAG, this stores the tag and the current consumer version number in the metadata parameter of the URL for publishing the verification results. This is part of ensuring that verification results webhooks go back to the correct consumer version number (eg for git statuses)



20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/pact_broker/pacts/metadata.rb', line 20

def (pact, selection_parameters)
  if selection_parameters[:tag]
    {
      "cvt" => [selection_parameters[:tag]],
      "cvn" => pact.consumer_version_number
    }
  else
    {
      "cvn" => pact.consumer_version_number
    }
  end
end

#build_metadata_for_pact_for_verification(verifiable_pact) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/pact_broker/pacts/metadata.rb', line 47

def (verifiable_pact)
  # todo put in tags
  if verifiable_pact.wip
    {
      "w" => true
    }
  else
    {
      "s" => verifiable_pact.selectors.collect do | selector |
        {
          "t" => selector.tag,
          "l" => selector.latest,
          "cvn" => selector.consumer_version.number
        }.compact
      end
    }
  end
end

#build_metadata_for_webhook_triggered_by_pact_publication(pact) ⇒ Object

When a pact is published, and a webhook is triggered, this stores the current tags and consumer version number in the metadata parameter of the pact version URL that is made available in the webhook template parameters. This is part of ensuring that verification results webhooks go back to the correct consumer version number (eg for git statuses)



38
39
40
41
42
43
44
45
# File 'lib/pact_broker/pacts/metadata.rb', line 38

def (pact)
   = {
    "cvn" => pact.consumer_version_number,
    "cvt" => pact.consumer_version_tag_names
  }
  ["w"] = "true"
  
end

#parse_hash(hash) ⇒ Object



78
79
80
81
82
83
# File 'lib/pact_broker/pacts/metadata.rb', line 78

def parse_hash(hash)
  hash.each_with_object({}) do | (key, value), new_hash |
    long_key = MAPPINGS.find{ |mapping| mapping.last == key }&.first
    new_hash[long_key || key] = parse_object(value)
  end
end

#parse_metadata(metadata) ⇒ Object



66
67
68
# File 'lib/pact_broker/pacts/metadata.rb', line 66

def ()
  parse_object()
end

#parse_object(object) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/pact_broker/pacts/metadata.rb', line 70

def parse_object(object)
  case object
  when Hash then parse_hash(object)
  when Array then object.collect{|i| parse_object(i) }
  else object
  end
end