Class: PactBroker::Verifications::Repository

Inherits:
Object
  • Object
show all
Includes:
Repositories, Repositories::Helpers
Defined in:
lib/pact_broker/verifications/repository.rb,
lib/pact_broker/verifications/latest_verifications_by_consumer_version.rb

Defined Under Namespace

Classes: LatestVerificationsByConsumerVersion

Instance Method Summary collapse

Methods included from Repositories

#label_repository, #matrix_repository, #pact_repository, #pacticipant_repository, #tag_repository, #verification_repository, #version_repository, #webhook_repository

Methods included from Repositories::Helpers

#case_sensitivity_options, #mysql?, #name_like, #order_ignore_case, #select_all_qualified, #select_for_subquery

Instance Method Details

#create(verification, provider_version_number, pact) ⇒ Object



22
23
24
25
26
27
28
# File 'lib/pact_broker/verifications/repository.rb', line 22

def create verification, provider_version_number, pact
  provider = pacticipant_repository.find_by_name(pact.provider_name)
  version = version_repository.find_by_pacticipant_id_and_number_or_create(provider.id, provider_version_number)
  verification.pact_version_id = pact_version_id_for(pact)
  verification.provider_version = version
  verification.save
end

#find(consumer_name, provider_name, pact_version_sha, verification_number) ⇒ Object



30
31
32
33
34
35
36
37
38
# File 'lib/pact_broker/verifications/repository.rb', line 30

def find consumer_name, provider_name, pact_version_sha, verification_number
  PactBroker::Domain::Verification
    .select_all_qualified
    .join(:all_pact_publications, pact_version_id: :pact_version_id)
    .consumer(consumer_name)
    .provider(provider_name)
    .pact_version_sha(pact_version_sha)
    .verification_number(verification_number).single_record
end

#find_latest_verification_for(consumer_name, provider_name, consumer_version_tag = nil) ⇒ Object

The most recent verification for the latest revision of the pact belonging to the version with the largest consumer_version_order.



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/pact_broker/verifications/repository.rb', line 55

def find_latest_verification_for consumer_name, provider_name, consumer_version_tag = nil
  query = LatestVerificationsByConsumerVersion
    .select_all_qualified
    .join(:all_pact_publications, pact_version_id: :pact_version_id)
    .consumer(consumer_name)
    .provider(provider_name)
  if consumer_version_tag == :untagged
    query = query.untagged
  elsif consumer_version_tag
    query = query.tag(consumer_version_tag)
  end
  query.reverse_order(
    Sequel[:all_pact_publications][:consumer_version_order],
    Sequel[:all_pact_publications][:revision_number],
    Sequel[LatestVerificationsByConsumerVersion.table_name][:number]
  ).limit(1).single_record
end

#find_latest_verification_for_tags(consumer_name, provider_name, consumer_version_tag, provider_version_tag) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/pact_broker/verifications/repository.rb', line 73

def find_latest_verification_for_tags consumer_name, provider_name, consumer_version_tag, provider_version_tag
  view_name = PactBroker::Verifications::AllVerifications.table_name
  query = PactBroker::Verifications::AllVerifications
    .select_all_qualified
    .join(:versions, {Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id]}, {table_alias: :provider_versions})
    .join(:all_pact_publications, { Sequel[view_name][:pact_version_id] => Sequel[:all_pact_publications][:pact_version_id] })
    .consumer(consumer_name)
    .provider(provider_name)
    .tag(consumer_version_tag)
    .provider_version_tag(provider_version_tag)

  query.reverse_order(
    Sequel[:all_pact_publications][:consumer_version_order],
    Sequel[:all_pact_publications][:revision_number],
    Sequel[:provider_versions][:order],
    Sequel[view_name][:execution_date]
  ).limit(1).single_record
end

#find_latest_verifications_for_consumer_version(consumer_name, consumer_version_number) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
# File 'lib/pact_broker/verifications/repository.rb', line 40

def find_latest_verifications_for_consumer_version consumer_name, consumer_version_number
  # Use LatestPactPublicationsByConsumerVersion not AllPactPublcations because we don't
  # want verifications for shadowed revisions as it would be misleading.
  LatestVerificationsByConsumerVersion
    .select_all_qualified
    .join(:latest_pact_publications_by_consumer_versions, pact_version_id: :pact_version_id)
    .consumer(consumer_name)
    .consumer_version_number(consumer_version_number)
    .order(:provider_name)
    .all
end

#next_numberObject

Ideally this would just be a sequence, but Sqlite and MySQL don’t support sequences in the way we need to use them ie. determining what the next number will be before we create the record, because Webmachine wants to set the URL of the resource that is about to be created before we actually create it.



18
19
20
# File 'lib/pact_broker/verifications/repository.rb', line 18

def next_number
  Sequence.next_val
end

#pact_version_id_for(pact) ⇒ Object



92
93
94
# File 'lib/pact_broker/verifications/repository.rb', line 92

def pact_version_id_for pact
  PactBroker::Pacts::PactPublication.select(:pact_version_id).where(id: pact.id)
end