Class: PactBroker::Matrix::QueryBuilder
- Inherits:
-
Object
- Object
- PactBroker::Matrix::QueryBuilder
- Defined in:
- lib/pact_broker/matrix/query_builder.rb
Class Method Summary collapse
- .consumer_in_pacticipant_ids(query_ids) ⇒ Object
- .consumer_or_consumer_version_matches(query_ids, qualifier) ⇒ Object
-
.consumer_or_consumer_version_or_provider_or_provider_or_provider_version_match(query_ids, pacts_qualifier = :p, verifications_qualifier = :v) ⇒ Object
QueryIds is built from a single selector, so there is only one pacticipant_id or pacticipant_version_id.
-
.either_consumer_or_provider_was_specified_in_query(query_ids, qualifier = nil) ⇒ Object
Some selecters are specified in the query, others are implied (when only one pacticipant is specified, the integrations are automatically worked out, and the selectors for these are of type :implied ) When there are 3 pacticipants that each have dependencies on each other (A->B, A->C, B->C), the query to deploy C (implied A, implied B, specified C) was returning the A->B row because it matched the implied selectors as well.
- .provider_matches(query_ids, qualifier) ⇒ Object
- .provider_or_provider_version_criteria(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
- .provider_or_provider_version_matches(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
- .provider_or_provider_version_matches_or_pact_unverified(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
- .qualify(qualifier, column) ⇒ Object
Class Method Details
.consumer_in_pacticipant_ids(query_ids) ⇒ Object
37 38 39 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 37 def self.consumer_in_pacticipant_ids(query_ids) { consumer_id: query_ids.all_pacticipant_ids } end |
.consumer_or_consumer_version_matches(query_ids, qualifier) ⇒ Object
41 42 43 44 45 46 47 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 41 def self.consumer_or_consumer_version_matches(query_ids, qualifier) ors = [] ors << { qualify(qualifier, :consumer_version_id) => query_ids.pacticipant_version_ids } if query_ids.pacticipant_version_ids.any? ors << { qualify(qualifier, :consumer_id) => query_ids.pacticipant_ids } if query_ids.pacticipant_ids.any? Sequel.|(*ors) end |
.consumer_or_consumer_version_or_provider_or_provider_or_provider_version_match(query_ids, pacts_qualifier = :p, verifications_qualifier = :v) ⇒ Object
QueryIds is built from a single selector, so there is only one pacticipant_id or pacticipant_version_id
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 65 def self.consumer_or_consumer_version_or_provider_or_provider_or_provider_version_match(query_ids, pacts_qualifier = :p, verifications_qualifier = :v) ors = if query_ids.pacticipant_version_id [ { Sequel[pacts_qualifier][:consumer_version_id] => query_ids.pacticipant_version_id }, { Sequel[verifications_qualifier][:provider_version_id] => query_ids.pacticipant_version_id } ] else [ { Sequel[pacts_qualifier][:consumer_id] => query_ids.pacticipant_id }, { Sequel[pacts_qualifier][:provider_id] => query_ids.pacticipant_id } ] end Sequel.|(*ors) end |
.either_consumer_or_provider_was_specified_in_query(query_ids, qualifier = nil) ⇒ Object
Some selecters are specified in the query, others are implied (when only one pacticipant is specified, the integrations are automatically worked out, and the selectors for these are of type :implied ) When there are 3 pacticipants that each have dependencies on each other (A->B, A->C, B->C), the query to deploy C (implied A, implied B, specified C) was returning the A->B row because it matched the implied selectors as well. This extra filter makes sure that every row that is returned actually matches one of the specified selectors.
56 57 58 59 60 61 62 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 56 def self.either_consumer_or_provider_was_specified_in_query(query_ids, qualifier = nil) Sequel.|({ qualify(qualifier, :consumer_id) => query_ids.specified_pacticipant_ids } , { qualify(qualifier, :provider_id) => query_ids.specified_pacticipant_ids }) end |
.provider_matches(query_ids, qualifier) ⇒ Object
8 9 10 11 12 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 8 def self.provider_matches(query_ids, qualifier) { qualify(qualifier, :provider_id) => query_ids.pacticipant_ids, } end |
.provider_or_provider_version_criteria(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
30 31 32 33 34 35 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 30 def self.provider_or_provider_version_criteria(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ors = [] ors << { qualify(provider_version_qualifier, :provider_version_id) => query_ids.pacticipant_version_ids } if query_ids.pacticipant_version_ids.any? ors << { qualify(provider_qualifier, :provider_id) => query_ids.pacticipant_ids } if query_ids.pacticipant_ids.any? ors end |
.provider_or_provider_version_matches(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
4 5 6 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 4 def self.provider_or_provider_version_matches(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) Sequel.|(*provider_or_provider_version_criteria(query_ids, provider_version_qualifier, provider_qualifier)) end |
.provider_or_provider_version_matches_or_pact_unverified(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 14 def self.provider_or_provider_version_matches_or_pact_unverified(query_ids, provider_version_qualifier = nil, provider_qualifier = nil) ors = provider_or_provider_version_criteria(query_ids, provider_version_qualifier, provider_qualifier) # If we have specified any versions, then we need to add an # "OR (provider matches these IDs and provider version is null)" # so that we get a line with blank verification details. if query_ids.pacticipant_version_ids.any? ors << { qualify(provider_qualifier, :provider_id) => query_ids.all_pacticipant_ids, qualify(provider_version_qualifier, :provider_version_id) => nil } end Sequel.|(*ors) end |
.qualify(qualifier, column) ⇒ Object
81 82 83 84 85 86 87 |
# File 'lib/pact_broker/matrix/query_builder.rb', line 81 def self.qualify(qualifier, column) if qualifier Sequel[qualifier][column] else column end end |