Class: Async::Limiter::Token
- Inherits:
-
Object
- Object
- Async::Limiter::Token
- Defined in:
- lib/async/limiter/token.rb
Overview
Token that represents an acquired resource and can be used to release or re-acquire.
Tokens provide advanced resource management by encapsulating both the acquired resource and the acquisition options (timeout, cost, priority, etc.). This enables re-acquisition with modified parameters while maintaining the original context.
The token automatically tracks release state using the resource itself as the state indicator (nil = released, non-nil = acquired).
Instance Attribute Summary collapse
-
#resource ⇒ Object
readonly
Returns the value of attribute resource.
Class Method Summary collapse
-
.acquire(limiter, **options, &block) ⇒ Object
Acquire a token from a limiter.
Instance Method Summary collapse
-
#acquire(**options, &block) ⇒ Object
Re-acquire the resource with modified options.
-
#acquired? ⇒ Boolean
Check if the token has been acquired.
-
#initialize(limiter, resource = nil) ⇒ Token
constructor
Initialize a new token.
-
#release ⇒ Object
Release the token back to the limiter.
-
#released? ⇒ Boolean
Check if the token has been released.
- #The acquired resource (nil if released).=(acquiredresource(nil) ⇒ Object
Constructor Details
#initialize(limiter, resource = nil) ⇒ Token
Initialize a new token.
48 49 50 51 |
# File 'lib/async/limiter/token.rb', line 48 def initialize(limiter, resource = nil) @limiter = limiter @resource = resource end |
Instance Attribute Details
#resource ⇒ Object (readonly)
Returns the value of attribute resource.
54 55 56 |
# File 'lib/async/limiter/token.rb', line 54 def resource @resource end |
Class Method Details
.acquire(limiter, **options, &block) ⇒ Object
Acquire a token from a limiter.
This class method provides a clean way to acquire tokens without adding token-specific methods to limiter classes.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/async/limiter/token.rb', line 31 def self.acquire(limiter, **, &block) resource = limiter.acquire(**) return nil unless resource token = new(limiter, resource) return token unless block_given? begin yield(token) ensure token.release end end |
Instance Method Details
#acquire(**options, &block) ⇒ Object
Re-acquire the resource with modified options.
This allows changing acquisition parameters (timeout, cost, priority, etc.) while maintaining the token context. The current resource is released and a new one is acquired with the merged options.
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/async/limiter/token.rb', line 75 def acquire(**, &block) raise "Token already acquired!" if @resource @resource = @limiter.acquire(reacquire: true, **) return @resource unless block_given? begin return yield(@resource) ensure self.release end end |
#acquired? ⇒ Boolean
Check if the token has been acquired.
91 92 93 |
# File 'lib/async/limiter/token.rb', line 91 def acquired? !!@resource end |
#release ⇒ Object
Release the token back to the limiter.
57 58 59 60 61 62 |
# File 'lib/async/limiter/token.rb', line 57 def release if resource = @resource @resource = nil @limiter.release(resource) end end |
#released? ⇒ Boolean
Check if the token has been released.
97 98 99 |
# File 'lib/async/limiter/token.rb', line 97 def released? !@resource end |
#The acquired resource (nil if released).=(acquiredresource(nil) ⇒ Object
54 |
# File 'lib/async/limiter/token.rb', line 54 attr_reader :resource |