Class: PactBroker::DB::Clean
- Inherits:
-
Object
- Object
- PactBroker::DB::Clean
- Includes:
- Logging
- Defined in:
- lib/pact_broker/db/clean.rb
Defined Under Namespace
Classes: Unionable
Class Method Summary collapse
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(database_connection, options = {}) ⇒ Clean
constructor
A new instance of Clean.
- #keep ⇒ Object
- #latest_pact_publication_ids_to_keep ⇒ Object
- #latest_tagged_pact_publications_ids_to_keep ⇒ Object
- #pact_publication_ids_to_delete ⇒ Object
- #pact_publication_ids_to_keep ⇒ Object
- #pact_publication_ids_to_keep_for_version_ids_to_keep ⇒ Object
- #resolve_ids(query, column_name = :id) ⇒ Object
- #verification_ids_to_delete ⇒ Object
- #verification_ids_to_keep ⇒ Object
- #verification_ids_to_keep_because_latest_verification_for_latest_pact ⇒ Object
- #verification_ids_to_keep_for_pact_publication_ids_to_keep ⇒ Object
-
#verification_ids_to_keep_for_version_ids_to_keep ⇒ Object
because they belong to the versions to keep.
- #version_ids_to_keep ⇒ Object
Methods included from Logging
Constructor Details
#initialize(database_connection, options = {}) ⇒ Clean
Returns a new instance of Clean.
25 26 27 28 |
# File 'lib/pact_broker/db/clean.rb', line 25 def initialize database_connection, = {} @db = database_connection @options = end |
Class Method Details
.call(database_connection, options = {}) ⇒ Object
21 22 23 |
# File 'lib/pact_broker/db/clean.rb', line 21 def self.call database_connection, = {} new(database_connection, ).call end |
Instance Method Details
#call ⇒ Object
106 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 133 |
# File 'lib/pact_broker/db/clean.rb', line 106 def call deleted_counts = {} kept_counts = {} deleted_counts[:pact_publications] = pact_publication_ids_to_delete.count kept_counts[:pact_publications] = pact_publication_ids_to_keep.count # Work out how to keep the head verifications for the provider tags. deleted_counts[:verification_results] = verification_ids_to_delete.count kept_counts[:verification_results] = verification_ids_to_keep.count delete_webhook_data(verification_triggered_webhook_ids_to_delete) delete_verifications delete_webhook_data(pact_publication_triggered_webhook_ids_to_delete) delete_pact_publications delete_orphan_pact_versions overwritten_delete_counts = delete_overwritten_verifications deleted_counts[:verification_results] = deleted_counts[:verification_results] + overwritten_delete_counts[:verification_results] kept_counts[:verification_results] = kept_counts[:verification_results] - overwritten_delete_counts[:verification_results] delete_orphan_versions { kept: kept_counts, deleted: deleted_counts } end |
#keep ⇒ Object
30 31 32 |
# File 'lib/pact_broker/db/clean.rb', line 30 def keep [:keep] || [PactBroker::Matrix::UnresolvedSelector.new(tag: true, latest: true), PactBroker::Matrix::UnresolvedSelector.new(latest: true)] end |
#latest_pact_publication_ids_to_keep ⇒ Object
56 57 58 |
# File 'lib/pact_broker/db/clean.rb', line 56 def latest_pact_publication_ids_to_keep @latest_pact_publication_ids_to_keep ||= resolve_ids(db[:latest_pact_publications].select(:id)) end |
#latest_tagged_pact_publications_ids_to_keep ⇒ Object
49 50 51 52 53 |
# File 'lib/pact_broker/db/clean.rb', line 49 def latest_tagged_pact_publications_ids_to_keep @latest_tagged_pact_publications_ids_to_keep ||= resolve_ids(keep.select(&:tag).select(&:latest).collect do | selector | PactBroker::Pacts::LatestTaggedPactPublications.select(:id).for_selector(selector) end.reduce(&:union) || []) end |
#pact_publication_ids_to_delete ⇒ Object
60 61 62 |
# File 'lib/pact_broker/db/clean.rb', line 60 def pact_publication_ids_to_delete @pact_publication_ids_to_delete ||= resolve_ids(db[:pact_publications].select(:id).where(id: pact_publication_ids_to_keep).invert) end |
#pact_publication_ids_to_keep ⇒ Object
39 40 41 42 43 |
# File 'lib/pact_broker/db/clean.rb', line 39 def pact_publication_ids_to_keep @pact_publication_ids_to_keep ||= pact_publication_ids_to_keep_for_version_ids_to_keep .union(latest_pact_publication_ids_to_keep) .union(latest_tagged_pact_publications_ids_to_keep) end |
#pact_publication_ids_to_keep_for_version_ids_to_keep ⇒ Object
45 46 47 |
# File 'lib/pact_broker/db/clean.rb', line 45 def pact_publication_ids_to_keep_for_version_ids_to_keep @pact_publication_ids_to_keep_for_version_ids_to_keep ||= resolve_ids(db[:pact_publications].select(:id).where(consumer_version_id: version_ids_to_keep)) end |
#resolve_ids(query, column_name = :id) ⇒ Object
34 35 36 37 |
# File 'lib/pact_broker/db/clean.rb', line 34 def resolve_ids(query, column_name = :id) # query Unionable.new(query.collect { |h| h[column_name] }) end |
#verification_ids_to_delete ⇒ Object
96 97 98 |
# File 'lib/pact_broker/db/clean.rb', line 96 def verification_ids_to_delete @verification_ids_to_delete ||= db[:verifications].select(:id).where(id: verification_ids_to_keep).invert end |
#verification_ids_to_keep ⇒ Object
92 93 94 |
# File 'lib/pact_broker/db/clean.rb', line 92 def verification_ids_to_keep @verification_ids_to_keep ||= verification_ids_to_keep_for_version_ids_to_keep.union(verification_ids_to_keep_because_latest_verification_for_latest_pact) end |
#verification_ids_to_keep_because_latest_verification_for_latest_pact ⇒ Object
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/pact_broker/db/clean.rb', line 69 def verification_ids_to_keep_because_latest_verification_for_latest_pact @verification_ids_to_keep_because_latest_verification ||= resolve_ids( db[:latest_verification_ids_for_pact_versions] .select(:latest_verification_id) .where(pact_version_id: db[:latest_pact_publications].select(:pact_version_id) ), :latest_verification_id ) end |
#verification_ids_to_keep_for_pact_publication_ids_to_keep ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/pact_broker/db/clean.rb', line 80 def verification_ids_to_keep_for_pact_publication_ids_to_keep @verification_ids_to_keep_for_pact_publication_ids_to_keep ||= resolve_ids( db[:latest_verification_id_for_pact_version_and_provider_version] .select(:verification_id) .where(pact_version_id: db[:pact_publications] .select(:pact_version_id) .where(id: pact_publication_ids_to_keep_for_version_ids_to_keep) ) ) end |
#verification_ids_to_keep_for_version_ids_to_keep ⇒ Object
because they belong to the versions to keep
65 66 67 |
# File 'lib/pact_broker/db/clean.rb', line 65 def verification_ids_to_keep_for_version_ids_to_keep @verification_ids_to_keep_for_version_ids_to_keep ||= resolve_ids(db[:verifications].select(:id).where(provider_version_id: version_ids_to_keep)) end |
#version_ids_to_keep ⇒ Object
100 101 102 103 104 |
# File 'lib/pact_broker/db/clean.rb', line 100 def version_ids_to_keep @version_ids_to_keep ||= keep.collect do | selector | PactBroker::Domain::Version.select(:id).for_selector(selector) end.reduce(&:union) end |