module Stance::Eventable

Public Instance Methods

ensure_event!(name) click to toggle source

Raise EventNotFound if the class event has not been defined.

# File lib/stance/eventable.rb, line 27
def ensure_event!(name)
  return if events_class.events.one? { |event, options| name == event && options[:class] }

  raise Stance::EventNotFound, "Class event `#{name}` not found"
end
event_class(name) click to toggle source
# File lib/stance/eventable.rb, line 41
def event_class(name)
  name.constantize
rescue NameError
  Stance::Event
end
events_class() click to toggle source
# File lib/stance/eventable.rb, line 33
def events_class
  @events_class ||= events_class_name.constantize
end
events_class_name() click to toggle source
# File lib/stance/eventable.rb, line 37
def events_class_name
  @events_class_name ||= "#{model_name.name}Events"
end
publish_event(name, metadata = {}) click to toggle source
# File lib/stance/eventable.rb, line 12
def publish_event(name, metadata = {})
  name = name.to_s
  ensure_event! name

  # Find the Event class - if any - and call it. Falls back to Stance::Event.
  ev = event_class(name).new(name, model_name.name, metadata, events_class.events[name])

  return ev if Stance.disabled_events.include?(ev.full_name)

  events_class.new(ev).run_callbacks(:create) { ev.create }
end