2019-05-02 18:17:27 -04:00
# frozen_string_literal: true
2013-02-05 14:16:51 -05:00
# This is meant to be used by plugins to trigger and listen to events
# So we can execute code when things happen.
2017-06-01 03:19:43 -04:00
class DiscourseEvent
2013-02-05 14:16:51 -05:00
2013-02-12 23:45:10 -05:00
# Defaults to a hash where default values are empty sets.
def self . events
@events || = Hash . new { | hash , key | hash [ key ] = Set . new }
end
2013-02-05 14:16:51 -05:00
2013-02-12 23:45:10 -05:00
def self . trigger ( event_name , * params )
events [ event_name ] . each do | event |
event . call ( * params )
2013-02-05 14:16:51 -05:00
end
2013-02-12 23:45:10 -05:00
end
2013-02-05 14:16:51 -05:00
2013-02-12 23:45:10 -05:00
def self . on ( event_name , & block )
2019-04-18 11:48:01 -04:00
if event_name == :site_setting_saved
2021-12-02 10:33:03 -05:00
Discourse . deprecate ( " The :site_setting_saved event is deprecated. Please use :site_setting_changed instead " , since : " 2.3.0beta8 " , drop_from : " 2.4 " , raise_error : true )
2019-04-18 11:48:01 -04:00
end
2013-02-12 23:45:10 -05:00
events [ event_name ] << block
end
2013-02-05 14:16:51 -05:00
2015-03-31 12:58:56 -04:00
def self . off ( event_name , & block )
2020-11-11 14:46:13 -05:00
raise ArgumentError . new " DiscourseEvent.off must reference a block " if block . nil?
2015-03-31 12:58:56 -04:00
events [ event_name ] . delete ( block )
end
2021-06-22 14:00:04 -04:00
def self . all_off ( event_name )
events . delete ( event_name )
end
2013-02-05 14:16:51 -05:00
end