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.



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

def initialize
  @subscriptions = []
end

Instance Attribute Details

#subscriptionsArray<Subscription> (readonly)

Returns:



58
59
60
# File 'lib/yoda/instrument.rb', line 58

def subscriptions
  @subscriptions
end

Class Method Details

.instanceInstrument

Returns:



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

def self.instance
  @instance ||= new
end

Instance Method Details

#emit(name, params) ⇒ Object

Parameters:

  • name (String)
  • (String)


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.

Parameters:

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


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

Parameters:

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


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

Parameters:

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


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

Parameters:

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

Returns:

  • (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

Parameters:



93
94
95
# File 'lib/yoda/instrument.rb', line 93

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