Class: WhittakerTech::Aeon::Disposer

Inherits:
Object
  • Object
show all
Defined in:
app/services/whittaker_tech/aeon/disposer.rb

Overview

Stateless service that soft-deletes invalidated Occurrence rows according to a policy hierarchy: per-allocation +disposal_policy+ override, falling back to the global Configuration#disposal_policy default.

Supported policies: - +:ephemeral+ — purge immediately on next Disposer run - +:windowed+ — purge after Configuration#invalidated_retention_window - +:historical+ / +:permanent+ — never auto-purge

Sets +purged_at+ in bounded batches. Never hard-deletes.

Examples:

Run a disposal pass

Disposer.call(batch_size: 500)
# => 42

Constant Summary collapse

DISPOSAL_BATCH_SIZE =

Maximum rows to purge per policy pass.

1_000

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(batch_size:) ⇒ Disposer

Returns a new instance of Disposer.

Parameters:

  • batch_size (Integer)

    max rows to purge per policy pass



30
31
32
# File 'app/services/whittaker_tech/aeon/disposer.rb', line 30

def initialize(batch_size:)
  @batch_size = batch_size
end

Class Method Details

.call(batch_size: DISPOSAL_BATCH_SIZE) ⇒ Integer

Returns total rows purged across all passes.

Parameters:

  • batch_size (Integer) (defaults to: DISPOSAL_BATCH_SIZE)

    max rows to purge per policy pass

Returns:

  • (Integer)

    total rows purged across all passes



25
26
27
# File 'app/services/whittaker_tech/aeon/disposer.rb', line 25

def self.call(batch_size: DISPOSAL_BATCH_SIZE)
  new(batch_size: batch_size).call
end

Instance Method Details

#callInteger

Runs ephemeral and windowed purge passes.

Returns:

  • (Integer)

    total rows purged



37
38
39
40
41
42
# File 'app/services/whittaker_tech/aeon/disposer.rb', line 37

def call
  purged = 0
  purged += purge_ephemeral!
  purged += purge_windowed!
  purged
end