Class: Legion::Extensions::Mesh::Helpers::PendingRequests
- Inherits:
-
Object
- Object
- Legion::Extensions::Mesh::Helpers::PendingRequests
- Defined in:
- lib/legion/extensions/mesh/helpers/pending_requests.rb
Instance Method Summary collapse
- #expire ⇒ Object
-
#initialize(default_ttl: 5) ⇒ PendingRequests
constructor
A new instance of PendingRequests.
- #pending?(correlation_id) ⇒ Boolean
- #pending_count ⇒ Object
- #register(correlation_id:, callback:, ttl: nil) ⇒ Object
- #resolve(correlation_id:, result:) ⇒ Object
Constructor Details
#initialize(default_ttl: 5) ⇒ PendingRequests
Returns a new instance of PendingRequests.
8 9 10 11 12 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 8 def initialize(default_ttl: 5) @default_ttl = default_ttl @requests = {} @mutex = Mutex.new end |
Instance Method Details
#expire ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 40 def expire now = Time.now expired = [] @mutex.synchronize do @requests.each do |id, entry| next unless now - entry[:registered_at] >= entry[:ttl] expired << id end expired.each { |id| @requests.delete(id) } end expired end |
#pending?(correlation_id) ⇒ Boolean
32 33 34 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 32 def pending?(correlation_id) @mutex.synchronize { @requests.key?(correlation_id) } end |
#pending_count ⇒ Object
36 37 38 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 36 def pending_count @mutex.synchronize { @requests.size } end |
#register(correlation_id:, callback:, ttl: nil) ⇒ Object
14 15 16 17 18 19 20 21 22 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 14 def register(correlation_id:, callback:, ttl: nil) @mutex.synchronize do @requests[correlation_id] = { callback: callback, registered_at: Time.now, ttl: ttl || @default_ttl } end end |
#resolve(correlation_id:, result:) ⇒ Object
24 25 26 27 28 29 30 |
# File 'lib/legion/extensions/mesh/helpers/pending_requests.rb', line 24 def resolve(correlation_id:, result:) entry = @mutex.synchronize { @requests.delete(correlation_id) } return false unless entry entry[:callback]&.call(result) true end |