diff --git a/lib/discourse_event.rb b/lib/discourse_event.rb index c61a70b031e..b9942e8b3bf 100644 --- a/lib/discourse_event.rb +++ b/lib/discourse_event.rb @@ -1,6 +1,13 @@ # This is meant to be used by plugins to trigger and listen to events # So we can execute code when things happen. class DiscourseEvent + def self.async + @async ||= !Rails.env.test? + end + + def self.async=(val) + @async = val + end # Defaults to a hash where default values are empty sets. def self.events @@ -8,6 +15,14 @@ class DiscourseEvent end def self.trigger(event_name, *params) + if async + Thread.new { call_events(event_name, *params) } + else + call_events(event_name, *params) + end + end + + def self.call_events(event_name, *params) events[event_name].each do |event| event.call(*params) end