Module: Spotter::ClassMethods
- Defined in:
- lib/spotter.rb
Instance Method Summary collapse
- #fetch_observer(name) ⇒ Object
- #methods_observed(*names) ⇒ Object
- #observing_classes ⇒ Object
- #register_observer(observing_klass_name) ⇒ Object
- #register_observers(*names) ⇒ Object
Instance Method Details
#fetch_observer(name) ⇒ Object
52 53 54 55 56 |
# File 'lib/spotter.rb', line 52 def fetch_observer(name) observing_classes.fetch(name) rescue IndexError raise ArgumentError.new("#{name} is not registered as an observer") end |
#methods_observed(*names) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/spotter.rb', line 41 def methods_observed(*names) names.each do |name| define_method("observe_#{name.to_s}".to_sym) do |*args, &block| attach_observers(*args) block.call changed notify_observers end end end |
#observing_classes ⇒ Object
27 28 29 |
# File 'lib/spotter.rb', line 27 def observing_classes @observing_classes ||= {} end |
#register_observer(observing_klass_name) ⇒ Object
31 32 33 34 35 |
# File 'lib/spotter.rb', line 31 def register_observer(observing_klass_name) observing_classes[observing_klass_name.to_sym] = "#{name}::#{observing_klass_name.to_s.camelize}".constantize rescue NameError raise ArgumentError.new("#{observing_klass_name} is not valid. If you have an observer #{name}::FooBar, pass :foo_bar") end |
#register_observers(*names) ⇒ Object
37 38 39 |
# File 'lib/spotter.rb', line 37 def register_observers(*names) names.each { |name| register_observer(name) } end |