Class: PactBroker::DB::CleanIncremental

Inherits:
Object
  • Object
show all
Defined in:
lib/pact_broker/db/clean_incremental.rb

Constant Summary collapse

DEFAULT_KEEP_SELECTORS =
[
  PactBroker::Matrix::UnresolvedSelector.new(tag: true, latest: true),
  PactBroker::Matrix::UnresolvedSelector.new(latest: true),
  PactBroker::Matrix::UnresolvedSelector.new(max_age: 90)
]
TABLES =
[:versions, :pact_publications, :pact_versions, :verifications, :triggered_webhooks, :webhook_executions]

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(database_connection, options = {}) ⇒ CleanIncremental

Returns a new instance of CleanIncremental.



20
21
22
23
# File 'lib/pact_broker/db/clean_incremental.rb', line 20

def initialize database_connection, options = {}
  @db = database_connection
  @options = options
end

Class Method Details

.call(database_connection, options = {}) ⇒ Object



16
17
18
# File 'lib/pact_broker/db/clean_incremental.rb', line 16

def self.call database_connection, options = {}
  new(database_connection, options).call
end

Instance Method Details

#callObject



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

def call
  require 'pact_broker/db/models'

  if dry_run?
    dry_run_results
  else
    before_counts = current_counts
    result = PactBroker::Domain::Version.where(id: resolve_ids(version_ids_to_delete)).delete
    delete_orphan_pact_versions
    after_counts = current_counts

    TABLES.each_with_object({}) do | table_name, comparison_counts |
      comparison_counts[table_name.to_s] = { "deleted" => before_counts[table_name] - after_counts[table_name], "kept" => after_counts[table_name] }
    end
  end
end

#keepObject



29
30
31
# File 'lib/pact_broker/db/clean_incremental.rb', line 29

def keep
  options[:keep] || DEFAULT_KEEP_SELECTORS
end

#limitObject



33
34
35
# File 'lib/pact_broker/db/clean_incremental.rb', line 33

def limit
  options[:limit] || 1000
end

#loggerObject



25
26
27
# File 'lib/pact_broker/db/clean_incremental.rb', line 25

def logger
  options[:logger] || PactBroker.logger
end

#resolve_ids(query, column_name = :id) ⇒ Object



37
38
39
# File 'lib/pact_broker/db/clean_incremental.rb', line 37

def resolve_ids(query, column_name = :id)
  query.collect { |h| h[column_name] }
end

#selected_versions_to_keepObject



49
50
51
52
53
# File 'lib/pact_broker/db/clean_incremental.rb', line 49

def selected_versions_to_keep
  keep.collect do | selector |
    PactBroker::Domain::Version.select(:id).for_selector(selector)
  end
end

#version_ids_to_deleteObject



41
42
43
# File 'lib/pact_broker/db/clean_incremental.rb', line 41

def version_ids_to_delete
  db[:versions].where(id: version_ids_to_keep).invert.limit(limit).order(Sequel.asc(:id))
end

#version_ids_to_keepObject



45
46
47
# File 'lib/pact_broker/db/clean_incremental.rb', line 45

def version_ids_to_keep
  @version_ids_to_keep ||= selected_versions_to_keep.reduce(&:union)
end