Sha256: 76c03426e783e027fd7dd45d33c36b7e0d2fed6f64dfab35d38ba55e600f8c08

Contents?: true

Size: 1.54 KB

Versions: 2

Compression:

Stored size: 1.54 KB

Contents

require "dry-validation"
require "pact_broker/messages"
require "pact_broker/api/contracts/dry_validation_predicates"
require "pact_broker/project_root"
require "pact_broker/string_refinements"

module PactBroker
  module Api
    module Contracts
      class CanIDeployQuerySchema
        extend PactBroker::Messages
        using PactBroker::StringRefinements

        SCHEMA = Dry::Validation.Schema do
          configure do
            predicates(DryValidationPredicates)
            config.messages_file = PactBroker.project_root.join("lib", "pact_broker", "locale", "en.yml")
          end
          required(:pacticipant).filled(:str?)
          required(:version).filled(:str?)
          optional(:to).filled(:str?)
          optional(:environment).filled(:str?, :environment_with_name_exists?)
        end

        def self.call(params)
          result = select_first_message(SCHEMA.call(params).messages(full: true))
          if params[:to] && params[:environment]
            result[:to] ||= []
            result[:to] << message("errors.validation.cannot_specify_tag_and_environment")
          end
          if params[:to].blank? && params[:environment].blank?
            result[:environment] ||= []
            result[:environment] << message("errors.validation.must_specify_environment_or_tag")
          end
          result
        end

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

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pact_broker-2.106.0 lib/pact_broker/matrix/can_i_deploy_query_schema.rb
pact_broker-2.105.0 lib/pact_broker/matrix/can_i_deploy_query_schema.rb