Class: Smith::Tool::CallAdmission
- Inherits:
-
Object
- Object
- Smith::Tool::CallAdmission
- Defined in:
- lib/smith/tool/call_admission.rb
Class Method Summary collapse
Instance Method Summary collapse
- #claim(tool) ⇒ Object
-
#initialize(tool:, reservation:) ⇒ CallAdmission
constructor
A new instance of CallAdmission.
Constructor Details
#initialize(tool:, reservation:) ⇒ CallAdmission
Returns a new instance of CallAdmission.
27 28 29 30 31 32 |
# File 'lib/smith/tool/call_admission.rb', line 27 def initialize(tool:, reservation:) @tool = tool @reservation = reservation @available = true @mutex = Mutex.new end |
Class Method Details
.around(admission, &block) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/smith/tool/call_admission.rb', line 13 def self.around(admission, &block) raise ArgumentError, "block required" unless block previous = current Thread.handle_interrupt(Object => :never) do Thread.current[THREAD_KEY] = admission begin Thread.handle_interrupt(Object => :immediate, &block) ensure Thread.current[THREAD_KEY] = previous end end end |
.current ⇒ Object
9 10 11 |
# File 'lib/smith/tool/call_admission.rb', line 9 def self.current Thread.current[THREAD_KEY] end |
Instance Method Details
#claim(tool) ⇒ Object
34 35 36 37 38 39 40 41 |
# File 'lib/smith/tool/call_admission.rb', line 34 def claim(tool) @mutex.synchronize do return false unless @available && @tool.equal?(tool) @available = false @reservation.claim end end |