Class: Spree::Event::SubscriberRegistry

Inherits:
Object
  • Object
show all
Defined in:
lib/spree/event/subscriber_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeSubscriberRegistry

Returns a new instance of SubscriberRegistry.



6
7
8
9
# File 'lib/spree/event/subscriber_registry.rb', line 6

def initialize
  @registry = {}
  @semaphore = Mutex.new
end

Instance Method Details

#activate_all_subscribersObject



20
21
22
# File 'lib/spree/event/subscriber_registry.rb', line 20

def activate_all_subscribers
  registry.each_key { |subscriber_name| activate_subscriber(subscriber_name.constantize) }
end

#activate_autoloadable_subscribersObject



15
16
17
18
# File 'lib/spree/event/subscriber_registry.rb', line 15

def activate_autoloadable_subscribers
  require_subscriber_files
  activate_all_subscribers
end

#activate_subscriber(subscriber) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/spree/event/subscriber_registry.rb', line 28

def activate_subscriber(subscriber)
  return unless registry[subscriber.name]

  subscriber.event_actions.each do |event_action, event_name|
    @semaphore.synchronize do
      unsafe_deactivate_subscriber(subscriber, event_action)

      subscription = Spree::Event.subscribe(event_name) { |event| subscriber.send(event_action, event) }

      # deprecated mappings, to be removed when Solidus 2.10 is not supported anymore:
      if subscriber.respond_to?("#{event_action}_handler=")
        subscriber.send("#{event_action}_handler=", subscription)
      end

      registry[subscriber.name][event_action] = subscription
    end
  end
end

#deactivate_all_subscribersObject



24
25
26
# File 'lib/spree/event/subscriber_registry.rb', line 24

def deactivate_all_subscribers
  registry.each_key { |subscriber_name| deactivate_subscriber(subscriber_name.constantize) }
end

#deactivate_subscriber(subscriber, event_action_name = nil) ⇒ Object



47
48
49
50
51
# File 'lib/spree/event/subscriber_registry.rb', line 47

def deactivate_subscriber(subscriber, event_action_name = nil)
  @semaphore.synchronize do
    unsafe_deactivate_subscriber(subscriber, event_action_name)
  end
end

#register(subscriber) ⇒ Object



11
12
13
# File 'lib/spree/event/subscriber_registry.rb', line 11

def register(subscriber)
  registry[subscriber.name] ||= {}
end