Class: PactBroker::Api::Contracts::EnvironmentSchema

Inherits:
Object
  • Object
show all
Extended by:
DryValidationWorkarounds, Messages
Defined in:
lib/pact_broker/api/contracts/environment_schema.rb

Constant Summary collapse

SCHEMA =
Dry::Validation.Schema do
  configure do
    predicates(DryValidationPredicates)
    config.messages_file = File.expand_path("../../../locale/en.yml", __FILE__)
  end
  required(:name).filled(:str?, :single_line?, :no_spaces?)
  optional(:displayName).maybe(:str?, :single_line?)
  required(:production).filled(included_in?: [true, false])
  optional(:contacts).each do
    schema do
      required(:name).filled(:str?, :single_line?)
      optional(:details).schema do
      end
    end
  end
end

Class Method Summary collapse

Methods included from DryValidationWorkarounds

flatten_array_of_hashes, flatten_indexed_messages, is_indexed_structure?, select_first_message

Methods included from Messages

message, pluralize, potential_duplicate_pacticipant_message, validation_message

Class Method Details

.call(params_with_string_keys) ⇒ Object



31
32
33
34
35
36
# File 'lib/pact_broker/api/contracts/environment_schema.rb', line 31

def self.call(params_with_string_keys)
  params = params_with_string_keys&.symbolize_keys
  results = select_first_message(flatten_indexed_messages(SCHEMA.call(params).messages(full: true)))
  validate_name(params, results)
  results
end

.validate_name(params, results) ⇒ Object



38
39
40
41
42
43
44
45
# File 'lib/pact_broker/api/contracts/environment_schema.rb', line 38

def self.validate_name(params, results)
  if (environment_with_same_name = PactBroker::Deployments::EnvironmentService.find_by_name(params[:name]))
    if environment_with_same_name.uuid != params[:uuid]
      results[:name] ||= []
      results[:name] << message("errors.validation.environment_name_must_be_unique", name: params[:name])
    end
  end
end