Class: PactBroker::Api::Contracts::VerifiablePactsJSONQuerySchema
- Inherits:
-
Object
- Object
- PactBroker::Api::Contracts::VerifiablePactsJSONQuerySchema
show all
- Extended by:
- DryValidationWorkarounds
- Defined in:
- lib/pact_broker/api/contracts/verifiable_pacts_json_query_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
optional(:providerVersionTags).maybe(:array?)
optional(:consumerVersionSelectors).each do
schema do
optional(:tag).filled(:str?)
optional(:latest).filled(included_in?: [true, false])
optional(:fallbackTag).filled(:str?)
optional(:consumer).filled(:str?, :not_blank?)
end
end
optional(:includePendingStatus).filled(included_in?: [true, false])
optional(:includeWipPactsSince).filled(:date?)
end
Class Method Summary
collapse
flatten_array_of_hashes, flatten_indexed_messages, is_indexed_structure?, select_first_message
Class Method Details
.add_cross_field_validation_errors(params, results) ⇒ Object
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
# File 'lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb', line 50
def self.add_cross_field_validation_errors(params, results)
if params[:consumerVersionSelectors].is_a?(Array)
errors = []
params[:consumerVersionSelectors].each_with_index do | selector, index |
if selector[:fallbackTag] && !selector[:latest]
errors << "fallbackTag can only be set if latest is true (at index #{index})"
end
if not_provided?(selector[:tag]) && selector[:latest] != true
errors << "latest must be true, or a tag must be provided (at index #{index})"
end
end
if errors.any?
results[:consumerVersionSelectors] ||= []
results[:consumerVersionSelectors].concat(errors)
end
end
end
|
.call(params) ⇒ Object
43
44
45
46
47
48
|
# File 'lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb', line 43
def self.call(params)
symbolized_params = params&.symbolize_keys
results = select_first_message(flatten_indexed_messages(SCHEMA.call(symbolized_params).messages(full: true)))
add_cross_field_validation_errors(symbolized_params, results)
results
end
|
.not_provided?(value) ⇒ Boolean
71
72
73
|
# File 'lib/pact_broker/api/contracts/verifiable_pacts_json_query_schema.rb', line 71
def self.not_provided?(value)
value.nil? || value.blank?
end
|