Module: Ventable::Event::ClassMethods

Defined in:
lib/ventable/event.rb

Instance Method Summary collapse

Instance Method Details

#configure(&block) ⇒ Object



56
57
58
# File 'lib/ventable/event.rb', line 56

def configure(&block)
  class_eval(&block)
end

#default_callback_methodObject

Determine method name to call when notifying observers from this event.



91
92
93
94
95
96
97
98
99
# File 'lib/ventable/event.rb', line 91

def default_callback_method
  if respond_to?(:ventable_callback_method_name)
    self.ventable_callback_method_name
  else
    target = self
    method = "handle_" + target.name.gsub(/::/,'__').underscore.gsub(/_event/, '')
    method.to_sym
  end
end

#find_observer_group(name) ⇒ Object



86
87
88
# File 'lib/ventable/event.rb', line 86

def find_observer_group(name)
  self.observers.find { |o| o.is_a?(Hash) && o[:name] == name }
end

#group(name, &block) ⇒ Object



76
77
78
79
80
81
82
83
84
# File 'lib/ventable/event.rb', line 76

def group(name, &block)
  g = find_observer_group(name)
  raise "Group #{name} already defined by #{g}" if g
  self.observers <<
      { name: name,
        around_block: block,
        observers: Set.new
      }
end

#notifies(*observer_list, &block) ⇒ Object

Raises:



60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'lib/ventable/event.rb', line 60

def notifies(*observer_list, &block)
  options = {}
  options.merge! observer_list.pop if observer_list.last.is_a?(Hash)
  observer_set = self.observers
  if options[:inside]
    observer_entry = self.find_observer_group(options[:inside])
    if observer_entry.nil?
      raise Ventable::Error.new("No group with name #{options[:inside]} found.")
    end
    observer_set = observer_entry[:observers]
  end
  raise Ventable::Error.new("found nil observer in params #{observer_list.inspect}") if observer_list.any?{|l| l.nil?}
  observer_list.compact.each { |o| observer_set << o } unless observer_list.empty?
  observer_set << block if block
end