mirror of
https://github.com/discourse/discourse.git
synced 2024-12-12 07:46:28 +08:00
30990006a9
This reduces chances of errors where consumers of strings mutate inputs and reduces memory usage of the app. Test suite passes now, but there may be some stuff left, so we will run a few sites on a branch prior to merging
30 lines
793 B
Ruby
30 lines
793 B
Ruby
# frozen_string_literal: true
|
|
|
|
# This is meant to be used by plugins to trigger and listen to events
|
|
# So we can execute code when things happen.
|
|
class DiscourseEvent
|
|
|
|
# Defaults to a hash where default values are empty sets.
|
|
def self.events
|
|
@events ||= Hash.new { |hash, key| hash[key] = Set.new }
|
|
end
|
|
|
|
def self.trigger(event_name, *params)
|
|
events[event_name].each do |event|
|
|
event.call(*params)
|
|
end
|
|
end
|
|
|
|
def self.on(event_name, &block)
|
|
if event_name == :site_setting_saved
|
|
Discourse.deprecate("The :site_setting_saved event is deprecated. Please use :site_setting_changed instead", since: "2.3.0beta8", drop_from: "2.4")
|
|
end
|
|
events[event_name] << block
|
|
end
|
|
|
|
def self.off(event_name, &block)
|
|
events[event_name].delete(block)
|
|
end
|
|
|
|
end
|