Class: FrugalTimeout::Request

Inherits:
Object
  • Object
show all
Includes:
Comparable
Defined in:
lib/frugal_timeout.rb

Overview

{{{1 Request Timeout request, holding expiry time, what exception to raise and in which thread. It is active by default, but can be defused. If it’s defused, then timeout won’t be enforced when #enforce is called.

Constant Summary collapse

@@mutex =
Mutex.new

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(thread, at, klass) ⇒ Request

Returns a new instance of Request.



49
50
51
52
# File 'lib/frugal_timeout.rb', line 49

def initialize thread, at, klass
  @thread, @at, @klass = thread, at, klass
  @defused = false
end

Instance Attribute Details

#atObject (readonly)

Returns the value of attribute at.



47
48
49
# File 'lib/frugal_timeout.rb', line 47

def at
  @at
end

#klassObject (readonly)

Returns the value of attribute klass.



47
48
49
# File 'lib/frugal_timeout.rb', line 47

def klass
  @klass
end

#threadObject (readonly)

Returns the value of attribute thread.



47
48
49
# File 'lib/frugal_timeout.rb', line 47

def thread
  @thread
end

Instance Method Details

#<=>(other) ⇒ Object



54
55
56
# File 'lib/frugal_timeout.rb', line 54

def <=>(other)
  @at <=> other.at
end

#defuse!Object

Timeout won’t be enforced if you defuse the request.



59
60
61
# File 'lib/frugal_timeout.rb', line 59

def defuse!
  @@mutex.synchronize { @defused = true }
end

#defused?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/frugal_timeout.rb', line 63

def defused?
  @@mutex.synchronize { @defused }
end

#enforceObject

Enforce this timeout request, unless it’s been defused. Return true if was enforced, false otherwise.



69
70
71
72
73
74
75
76
77
# File 'lib/frugal_timeout.rb', line 69

def enforce
  @@mutex.synchronize {
  return false if @defused

  @thread.raise @klass, 'execution expired'
  @defused = true
  true
  }
end