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.
65
66
67
|
# File 'lib/yoda/instrument.rb', line 65
def initialize
@subscriptions = []
end
|
Instance Attribute Details
58
59
60
|
# File 'lib/yoda/instrument.rb', line 58
def subscriptions
@subscriptions
end
|
Class Method Details
61
62
63
|
# File 'lib/yoda/instrument.rb', line 61
def self.instance
@instance ||= new
end
|
Instance Method Details
#emit(name, params) ⇒ Object
87
88
89
90
|
# File 'lib/yoda/instrument.rb', line 87
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.
71
72
73
74
75
76
|
# File 'lib/yoda/instrument.rb', line 71
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
103
104
105
|
# File 'lib/yoda/instrument.rb', line 103
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
109
110
111
|
# File 'lib/yoda/instrument.rb', line 109
def registry_dump(index: nil, length: nil)
emit(:registry_dump, index: index, length: length)
end
|
#subscribe(name, &callback) ⇒ Subsctiption
81
82
83
|
# File 'lib/yoda/instrument.rb', line 81
def subscribe(name, &callback)
Subscription.new(instrument: self, name: name, callback: callback).tap { |subscription| subscriptions.push(subscription) }
end
|
#unsubscribe(subscription) ⇒ Object
93
94
95
|
# File 'lib/yoda/instrument.rb', line 93
def unsubscribe(subscription)
subscriptions.delete(subscription)
end
|