Class: PactBroker::Matrix::QueryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/pact_broker/matrix/query_builder.rb

Class Method Summary collapse

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