Class: Yoda::Instrument

Inherits:
Object
  • Object
show all
Defined in:
lib/yoda/instrument.rb

Defined Under Namespace

Classes: Progress, Subscription

Instance Attribute Summary collapse

event_name collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeInstrument

Returns a new instance of Instrument.



77
78
79
# File 'lib/yoda/instrument.rb', line 77

def initialize
  @subscriptions = []
end

Instance Attribute Details

#subscriptionsArray<Subscription> (readonly)

Returns:



60
61
62
# File 'lib/yoda/instrument.rb', line 60

def subscriptions
  @subscriptions
end

Class Method Details

.instanceInstrument

Returns Instrument instance (thread local).

Returns:



65
66
67
# File 'lib/yoda/instrument.rb', line 65

def instance
  local.value
end

Instance Method Details

#emit(name, params) ⇒ Object

Parameters:

  • name (String)
  • (String)


99
100
101
102
# 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 = {}) ⇒ Object

Add subscriptions and eval the given block. these subscriptions are unsubscribed after the block.

Parameters:

  • subscription_hash (Hash{ Symbol, String => #call }) (defaults to: {})


83
84
85
86
87
88
# 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) ⇒ Object

Parameters:

  • phase (Symbol)
  • message (String)
  • index (Integer, nil) (defaults to: nil)
  • length (Integer, nil) (defaults to: nil)


115
116
117
# 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) ⇒ Object

Parameters:

  • index (Integer, nil) (defaults to: nil)
  • length (Integer, nil) (defaults to: nil)


121
122
123
# 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) ⇒ Subsctiption

Parameters:

  • name (String, Symbol)
  • callback (#call)

Returns:

  • (Subsctiption)


93
94
95
# 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) ⇒ Object

Parameters:



105
106
107
# File 'lib/yoda/instrument.rb', line 105

def unsubscribe(subscription)
  subscriptions.delete(subscription)
end