Module: Spotter::ClassMethods

Defined in:
lib/spotter.rb

Instance Method Summary collapse

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_classesObject



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