Class: PactBroker::Verifications::Repository
- Inherits:
-
Object
- Object
- PactBroker::Verifications::Repository
- Includes:
- Repositories, Repositories::Helpers
- Defined in:
- lib/pact_broker/verifications/repository.rb
Instance Method Summary collapse
- #create(verification, provider_version_number, pact) ⇒ Object
- #delete_all_verifications_between(consumer_name, options) ⇒ Object
- #delete_by_provider_version_id(version_id) ⇒ Object
- #find(consumer_name, provider_name, pact_version_sha, verification_number) ⇒ Object
- #find_latest_for_pact(pact) ⇒ Object
-
#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.
- #find_latest_verification_for_tags(consumer_name, provider_name, consumer_version_tag, provider_version_tag) ⇒ Object
- #find_latest_verifications_for_consumer_version(consumer_name, consumer_version_number) ⇒ Object
-
#next_number ⇒ Object
Ideally this would just be a sequence, but Sqlite and MySQL don’t support sequences in the way we need to use them ie.
- #pact_version_id_for(pact) ⇒ Object
- #search_for_latest(consumer_name, provider_name) ⇒ Object
- #update_latest_verification_id(verification) ⇒ Object
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, #postgres?, #select_all_qualified, #select_for_subquery, #upsert
Instance Method Details
#create(verification, provider_version_number, pact) ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/pact_broker/verifications/repository.rb', line 23 def create verification, provider_version_number, pact provider = pacticipant_repository.find_by_name(pact.provider_name) consumer = pacticipant_repository.find_by_name(pact.consumer_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.provider_id = provider.id verification.consumer_id = consumer.id verification.save update_latest_verification_id(verification) verification end |
#delete_all_verifications_between(consumer_name, options) ⇒ Object
134 135 136 137 138 |
# File 'lib/pact_broker/verifications/repository.rb', line 134 def delete_all_verifications_between(consumer_name, ) consumer = pacticipant_repository.find_by_name(consumer_name) provider = pacticipant_repository.find_by_name(.fetch(:and)) PactBroker::Domain::Verification.where(provider: provider, consumer: consumer).delete end |
#delete_by_provider_version_id(version_id) ⇒ Object
130 131 132 |
# File 'lib/pact_broker/verifications/repository.rb', line 130 def delete_by_provider_version_id version_id PactBroker::Domain::Verification.where(provider_version_id: version_id).delete end |
#find(consumer_name, provider_name, pact_version_sha, verification_number) ⇒ Object
47 48 49 50 51 52 53 54 55 |
# File 'lib/pact_broker/verifications/repository.rb', line 47 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_for_pact(pact) ⇒ Object
57 58 59 |
# File 'lib/pact_broker/verifications/repository.rb', line 57 def find_latest_for_pact(pact) PactBroker::Pacts::PactPublication.where(id: pact.id).single_record.latest_verification 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.
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/pact_broker/verifications/repository.rb', line 85 def find_latest_verification_for consumer_name, provider_name, consumer_version_tag = nil query = LatestVerificationForPactVersion .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[LatestVerificationForPactVersion.table_name][:number] ).limit(1).single_record end |
#find_latest_verification_for_tags(consumer_name, provider_name, consumer_version_tag, provider_version_tag) ⇒ Object
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
# File 'lib/pact_broker/verifications/repository.rb', line 103 def consumer_name, provider_name, consumer_version_tag, provider_version_tag view_name = PactBroker::Domain::Verification.table_name consumer = pacticipant_repository.find_by_name(consumer_name) provider = pacticipant_repository.find_by_name(provider_name) consumer_tag_filter = PactBroker::Repositories::Helpers.name_like(Sequel.qualify(:consumer_tags, :name), consumer_version_tag) provider_tag_filter = PactBroker::Repositories::Helpers.name_like(Sequel.qualify(:provider_tags, :name), provider_version_tag) query = PactBroker::Domain::Verification .select_all_qualified .join(:versions, { Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id] }, { table_alias: :provider_versions }) .join(:latest_verification_id_for_pact_version_and_provider_version, { Sequel[:lv][:verification_id] => Sequel[view_name][:id] }, { table_alias: :lv }) .join(:latest_pact_publication_ids_for_consumer_versions, { Sequel[view_name][:pact_version_id] => Sequel[:lp][:pact_version_id] }, { table_alias: :lp }) .join(:versions, { Sequel[:consumer_versions][:id] => Sequel[:lp][:consumer_version_id] }, { table_alias: :consumer_versions }) .join(:tags, { Sequel[:consumer_tags][:version_id] => Sequel[:lp][:consumer_version_id]}, { table_alias: :consumer_tags }) .join(:tags, { Sequel[:provider_tags][:version_id] => Sequel[view_name][:provider_version_id]}, { table_alias: :provider_tags }) .where(consumer: consumer, provider: provider) .where(consumer_tag_filter) .where(provider_tag_filter) query.reverse_order( Sequel[:consumer_versions][:order], 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
70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/pact_broker/verifications/repository.rb', line 70 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. LatestVerificationForPactVersion .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_number ⇒ Object
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.
19 20 21 |
# File 'lib/pact_broker/verifications/repository.rb', line 19 def next_number Sequence.next_val end |
#pact_version_id_for(pact) ⇒ Object
140 141 142 |
# File 'lib/pact_broker/verifications/repository.rb', line 140 def pact_version_id_for pact PactBroker::Pacts::PactPublication.select(:pact_version_id).where(id: pact.id) end |
#search_for_latest(consumer_name, provider_name) ⇒ Object
61 62 63 64 65 66 67 68 |
# File 'lib/pact_broker/verifications/repository.rb', line 61 def search_for_latest consumer_name, provider_name query = LatestVerificationForPactVersion .select_all_qualified .join(:all_pact_publications, pact_version_id: :pact_version_id) query = query.consumer(consumer_name) if consumer_name query = query.provider(provider_name) if provider_name query.reverse(:execution_date, :id).first end |
#update_latest_verification_id(verification) ⇒ Object
36 37 38 39 40 41 42 43 44 45 |
# File 'lib/pact_broker/verifications/repository.rb', line 36 def update_latest_verification_id verification params = { pact_version_id: verification.pact_version_id, provider_version_id: verification.provider_version_id, provider_id: verification.provider_version.pacticipant_id, verification_id: verification.id, consumer_id: verification.consumer_id } LatestVerificationIdForPactVersionAndProviderVersion.new(params).upsert end |