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(verification_id) ⇒ 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
#mysql?, #name_like, #order_append_ignore_case, #order_ignore_case, #pacticipant_id_for_name, #postgres?, #select_all_qualified, #select_for_subquery, #upsert
Instance Method Details
#create(verification, provider_version_number, pact) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 33 |
# 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) 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(verification_id) ⇒ Object
35 36 37 |
# File 'lib/pact_broker/verifications/repository.rb', line 35 def delete(verification_id) PactBroker::Domain::Verification.where(id: verification_id).delete end |
#delete_all_verifications_between(consumer_name, options) ⇒ Object
138 139 140 141 142 |
# File 'lib/pact_broker/verifications/repository.rb', line 138 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
134 135 136 |
# File 'lib/pact_broker/verifications/repository.rb', line 134 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
51 52 53 54 55 56 57 58 59 |
# File 'lib/pact_broker/verifications/repository.rb', line 51 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
61 62 63 |
# File 'lib/pact_broker/verifications/repository.rb', line 61 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.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/pact_broker/verifications/repository.rb', line 89 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
107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/pact_broker/verifications/repository.rb', line 107 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
74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/pact_broker/verifications/repository.rb', line 74 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.
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
144 145 146 |
# File 'lib/pact_broker/verifications/repository.rb', line 144 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
65 66 67 68 69 70 71 72 |
# File 'lib/pact_broker/verifications/repository.rb', line 65 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
39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/pact_broker/verifications/repository.rb', line 39 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, created_at: verification.created_at } LatestVerificationIdForPactVersionAndProviderVersion.new(params).upsert end |