Class: PactBroker::Verifications::Repository
- Inherits:
-
Object
- Object
- PactBroker::Verifications::Repository
- 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
- #create(verification, provider_version_number, pact) ⇒ Object
- #find(consumer_name, provider_name, pact_version_sha, verification_number) ⇒ 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
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 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_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
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 |