class Yoda::Instrument
Attributes
subscriptions[R]
@return [Array<Subscription>]
Public Class Methods
instance()
click to toggle source
Returns Instrument
instance (thread local). @return [Instrument]
# File lib/yoda/instrument.rb, line 65 def instance local.value end
new()
click to toggle source
# File lib/yoda/instrument.rb, line 77 def initialize @subscriptions = [] end
Private Class Methods
local()
click to toggle source
@return [Concurrent::ThreadLocalVar<Instrument>]
# File lib/yoda/instrument.rb, line 72 def local @local ||= Concurrent::ThreadLocalVar.new { Instrument.new } end
Public Instance Methods
emit(name, params)
click to toggle source
@param name [String] @param [String]
# File lib/yoda/instrument.rb, line 99 def emit(name, params) Logger.trace("#{name}: #{params}") subscriptions.select { |subscription| subscription.name === name }.each { |subscription| subscription.call(params) } end
hear(subscription_hash = {}) { || ... }
click to toggle source
Add subscriptions and eval the given block. these subscriptions are unsubscribed after the block. @param subscription_hash [Hash{ Symbol, String => call }]
# File lib/yoda/instrument.rb, line 83 def hear(subscription_hash = {}) subscriptions = subscription_hash.map { |key, value| subscribe(key, &value) } value = yield subscriptions.each(&:unsubscribe) value end
initialization_progress(phase:, message:, index: nil, length: nil)
click to toggle source
@param phase [Symbol] @param message [String] @param index [Integer, nil] @param length [Integer, nil]
# File lib/yoda/instrument.rb, line 115 def initialization_progress(phase:, message:, index: nil, length: nil) emit(:initialization_progress, phase: phase, message: message, index: index, length: length) end
registry_dump(index: nil, length: nil)
click to toggle source
@param index [Integer, nil] @param length [Integer, nil]
# File lib/yoda/instrument.rb, line 121 def registry_dump(index: nil, length: nil) emit(:registry_dump, index: index, length: length) end
subscribe(name, &callback)
click to toggle source
@param name [String, Symbol] @param callback [#call] @return [Subsctiption]
# File lib/yoda/instrument.rb, line 93 def subscribe(name, &callback) Subscription.new(instrument: self, name: name, callback: callback).tap { |subscription| subscriptions.push(subscription) } end
unsubscribe(subscription)
click to toggle source
@param subscription [Subscription]
# File lib/yoda/instrument.rb, line 105 def unsubscribe(subscription) subscriptions.delete(subscription) end