Class: SolidObjects::SyncDeadline

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

Constant Summary collapse

KEY =

Returns:

  • (::Symbol)
:solid_objects_sync_deadline

Class Method Summary collapse

Class Method Details

.active?Boolean

RBS:

  • () -> bool

Returns:

  • (Boolean)


18
19
20
# File 'lib/solid_objects/sync_deadline.rb', line 18

def active?
  !deadline.nil?
end

.expired?Boolean

RBS:

  • () -> bool

Returns:

  • (Boolean)


23
24
25
# File 'lib/solid_objects/sync_deadline.rb', line 23

def expired?
  active? && !remaining.positive?
end

.remainingFloat

RBS:

  • () -> Float

Returns:

  • (Float)


28
29
30
31
32
# File 'lib/solid_objects/sync_deadline.rb', line 28

def remaining
  return Float::INFINITY unless deadline

  deadline - monotonic_now
end

.remaining_millisecondsInteger

RBS:

  • () -> Integer

Returns:

  • (Integer)


35
36
37
# File 'lib/solid_objects/sync_deadline.rb', line 35

def remaining_milliseconds
  [ (remaining * 1_000).floor, 1 ].max
end

.remaining_secondsInteger

RBS:

  • () -> Integer

Returns:

  • (Integer)


40
41
42
# File 'lib/solid_objects/sync_deadline.rb', line 40

def remaining_seconds
  [ remaining.ceil, 1 ].max
end

.with(timeout:) { ... } ⇒ Object

RBS:

  • (timeout: Numeric) { () -> untyped } -> untyped

Parameters:

  • timeout: (Numeric)

Yields:

Yield Returns:

  • (Object)

Returns:

  • (Object)


9
10
11
12
13
14
15
# File 'lib/solid_objects/sync_deadline.rb', line 9

def with(timeout:)
  previous_deadline = ActiveSupport::IsolatedExecutionState[KEY]
  ActiveSupport::IsolatedExecutionState[KEY] = monotonic_now + timeout.to_f
  yield
ensure
  ActiveSupport::IsolatedExecutionState[KEY] = previous_deadline
end