Class: SolidObjects::PollingBackoff

Inherits:
Object
  • Object
show all
Defined in:
lib/solid_objects/polling_backoff.rb,
sig/generated/lib/solid_objects/polling_backoff.rbs

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(minimum_interval:, maximum_interval:, on_change: nil) ⇒ PollingBackoff

Returns a new instance of PollingBackoff.

RBS:

  • (minimum_interval: Numeric, maximum_interval: Numeric, ?on_change: Proc?) -> void

Parameters:

  • minimum_interval: (Numeric)
  • maximum_interval: (Numeric)
  • on_change: (Proc, nil) (defaults to: nil)


13
14
15
16
17
18
# File 'lib/solid_objects/polling_backoff.rb', line 13

def initialize(minimum_interval:, maximum_interval:, on_change: nil)
  @minimum_interval = minimum_interval.to_f
  @maximum_interval = [ @minimum_interval, maximum_interval.to_f ].max
  @current_interval = @minimum_interval
  @on_change = on_change
end

Instance Attribute Details

#current_intervalObject (readonly)

RBS:

  • @minimum_interval: Float

  • @maximum_interval: Float

  • @current_interval: Float

  • @on_change: Proc?

Returns:

  • (Object)


10
11
12
# File 'lib/solid_objects/polling_backoff.rb', line 10

def current_interval
  @current_interval
end

Instance Method Details

#change(interval, reason) ⇒ void

This method returns an undefined value.

RBS:

  • (Float, :idle | :work | :wake_up) -> void

Parameters:

  • (Float)
  • (:idle, :work, :wake_up)


33
34
35
36
37
38
39
40
41
42
43
# File 'lib/solid_objects/polling_backoff.rb', line 33

def change(interval, reason)
  return if interval == current_interval

  previous_interval = current_interval
  @current_interval = interval
  @on_change&.call(
    previous_interval:,
    current_interval: interval,
    reason:
  )
end

#record_idlevoid

This method returns an undefined value.

RBS:

  • () -> void



21
22
23
# File 'lib/solid_objects/polling_backoff.rb', line 21

def record_idle
  change([ current_interval * 2, @maximum_interval ].min, :idle)
end

#reset(reason) ⇒ void

This method returns an undefined value.

RBS:

  • (:work | :wake_up) -> void

Parameters:

  • (:work, :wake_up)


26
27
28
# File 'lib/solid_objects/polling_backoff.rb', line 26

def reset(reason)
  change(@minimum_interval, reason)
end