Module: Tap::Signals::ClassMethods
- Defined in:
- lib/tap/signals/class_methods.rb
Constant Summary collapse
- SIGNALS_CLASS =
Configurable::ClassMethods::CONFIGURATIONS_CLASS
Instance Attribute Summary collapse
-
#signal_registry ⇒ Object
readonly
A hash of (key, Signal) pairs defining signals available to the class.
Class Method Summary collapse
Instance Method Summary collapse
-
#cache_signals(on = true) ⇒ Object
Caches the signals hash so as to improve peformance.
-
#signals ⇒ Object
A hash of (key, Signal) pairs representing all signals defined on this class or inherited from ancestors.
Instance Attribute Details
#signal_registry ⇒ Object (readonly)
A hash of (key, Signal) pairs defining signals available to the class.
9 10 11 |
# File 'lib/tap/signals/class_methods.rb', line 9 def signal_registry @signal_registry end |
Class Method Details
.initialize(base) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/tap/signals/class_methods.rb', line 11 def self.initialize(base) unless base.instance_variable_defined?(:@signal_registry) base.instance_variable_set(:@signal_registry, SIGNALS_CLASS.new) end unless base.instance_variable_defined?(:@signals) base.instance_variable_set(:@signals, nil) end unless base.instance_variable_defined?(:@use_signal_constants) base.instance_variable_set(:@use_signal_constants, true) end end |
Instance Method Details
#cache_signals(on = true) ⇒ Object
Caches the signals hash so as to improve peformance. Call with on set to false to turn off caching.
53 54 55 56 |
# File 'lib/tap/signals/class_methods.rb', line 53 def cache_signals(on=true) @signals = nil @signals = self.signals if on end |
#signals ⇒ Object
A hash of (key, Signal) pairs representing all signals defined on this class or inherited from ancestors. The signals hash is generated on each call to ensure it accurately reflects any signals added on ancestors. This slows down signal calls through instance.signal.
Call cache_signals after all signals have been declared in order to prevent regeneration of signals and to significantly improve performance.
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/tap/signals/class_methods.rb', line 33 def signals return @signals if @signals signals = SIGNALS_CLASS.new ancestors.reverse.each do |ancestor| next unless ancestor.kind_of?(ClassMethods) ancestor.signal_registry.each_pair do |key, value| if value.nil? signals.delete(key) else signals[key] = value end end end signals end |