Class: Yoda::Instrument
- Inherits:
-
Object
show all
- Defined in:
- lib/yoda/instrument.rb
Defined Under Namespace
Classes: Progress, Subscription
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of Instrument.
77
78
79
|
# File 'lib/yoda/instrument.rb', line 77
def initialize
@subscriptions = []
end
|
Instance Attribute Details
60
61
62
|
# File 'lib/yoda/instrument.rb', line 60
def subscriptions
@subscriptions
end
|
Class Method Details
Returns Instrument instance (thread local).
65
66
67
|
# File 'lib/yoda/instrument.rb', line 65
def instance
local.value
end
|
Instance Method Details
#emit(name, params) ⇒ Object
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.
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
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
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
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
105
106
107
|
# File 'lib/yoda/instrument.rb', line 105
def unsubscribe(subscription)
subscriptions.delete(subscription)
end
|