Sha256: a35d521213f6a4dcf20a955e1df953f8f3fd6ec15c7bd056d9f6286695bd8256

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

require 'dry-validation'

module PactBroker
  module Api
    module Contracts
      class VerifiablePactsQuerySchema
        SCHEMA = Dry::Validation.Schema do
          optional(:provider_version_tags).maybe(:array?)
          # optional(:exclude_other_pending).filled(included_in?: ["true", "false"])
          optional(:consumer_version_selectors).each do
            schema do
              required(:tag).filled(:str?)
              optional(:latest).filled(included_in?: ["true", "false"])
            end
          end
        end

        def self.call(params)
          select_first_message(flatten_index_messages(SCHEMA.call(params).messages(full: true)))
        end

        def self.select_first_message(messages)
          messages.each_with_object({}) do | (key, value), new_messages |
            new_messages[key] = [value.first]
          end
        end

        def self.flatten_index_messages(messages)
          if messages[:consumer_version_selectors]
            new_messages = messages[:consumer_version_selectors].collect do | index, value |
              value.values.flatten.collect { | text | "#{text} at index #{index}"}
            end.flatten
            messages.merge(consumer_version_selectors: new_messages)
          else
            messages
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pact_broker-2.40.0 lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb
pact_broker-2.39.0 lib/pact_broker/api/contracts/verifiable_pacts_query_schema.rb