Class: ActiveRecordServerless::Timeout

Inherits:
Object
  • Object
show all
Defined in:
lib/active_record_serverless/timeout.rb

Constant Summary collapse

MUTEX =
Mutex.new

Class Method Summary collapse

Class Method Details

.last_usedObject



17
18
19
# File 'lib/active_record_serverless/timeout.rb', line 17

def last_used
  MUTEX.synchronize { _last_used }
end

.on_timeout(timeout, &block) ⇒ Object

Raises:

  • (ArgumentError)


21
22
23
24
25
26
27
28
29
30
31
# File 'lib/active_record_serverless/timeout.rb', line 21

def on_timeout(timeout, &block)
  raise ArgumentError, 'Timeout must be greater than 1' unless timeout.to_f >= 1.0

  touch!

  MUTEX.synchronize do
    _running_id((_running_id || 0) + 1)
  end

  _on_timeout(timeout.to_f, running_id, &block)
end

.running?Boolean

Returns:

  • (Boolean)


33
34
35
# File 'lib/active_record_serverless/timeout.rb', line 33

def running?
  running_id.positive?
end

.running_idObject



37
38
39
# File 'lib/active_record_serverless/timeout.rb', line 37

def running_id
  MUTEX.synchronize { _running_id }
end

.touch!Object



8
9
10
11
12
13
14
15
# File 'lib/active_record_serverless/timeout.rb', line 8

def touch!
  ActiveSupport::Notifications.instrument('active_record_serverless.touch') do
    MUTEX.synchronize do
      _last_used(Time.now)
      yield if block_given?
    end
  end
end