Class: DiscourseEvent

Inherits:
Object
  • Object
show all
Defined in:
lib/discourse_event.rb

Overview

This is meant to be used by plugins to trigger and listen to events So we can execute code when things happen.

Class Method Summary collapse

Class Method Details

.all_off(event_name) ⇒ Object



43
44
45
# File 'lib/discourse_event.rb', line 43

def self.all_off(event_name)
  events.delete(event_name)
end

.eventsObject

Defaults to a hash where default values are empty sets.



7
8
9
# File 'lib/discourse_event.rb', line 7

def self.events
  @events ||= Hash.new { |hash, key| hash[key] = Set.new }
end

.off(event_name, &block) ⇒ Object



38
39
40
41
# File 'lib/discourse_event.rb', line 38

def self.off(event_name, &block)
  raise ArgumentError.new "DiscourseEvent.off must reference a block" if block.nil?
  events[event_name].delete(block)
end

.on(event_name, &block) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/discourse_event.rb', line 15

def self.on(event_name, &block)
  case event_name
  when :user_badge_removed
    Discourse.deprecate(
      "The :user_badge_removed event is deprecated. Please use :user_badge_revoked instead",
      since: "3.1.0.beta5",
      drop_from: "3.2.0.beta1",
      output_in_test: true,
    )
  when :post_notification_alert
    Discourse.deprecate(
      "The :post_notification_alert event is deprecated. Please use :push_notification instead",
      since: "3.2.0.beta1",
      drop_from: "3.3.0.beta1",
      output_in_test: true,
    )
  else
    # ignore
  end

  events[event_name] << block
end

.trigger(event_name, *args, **kwargs) ⇒ Object



11
12
13
# File 'lib/discourse_event.rb', line 11

def self.trigger(event_name, *args, **kwargs)
  events[event_name].each { |event| event.call(*args, **kwargs) }
end