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