Class: Spree::Events::SubscriberJob

Inherits:
BaseJob
  • Object
show all
Defined in:
app/jobs/spree/events/subscriber_job.rb

Overview

Job for executing subscribers asynchronously.

When subscribers are configured to run async (the default), this job is enqueued to handle the event processing in the background.

Examples:

Direct usage (typically called by the adapter)

Spree::Events::SubscriberJob.perform_later(
  'MySubscriber',
  { name: 'order.complete', payload: {...}, ... }
)

Instance Method Summary collapse

Instance Method Details

#perform(subscriber_class_name, event_hash) ⇒ Object

Parameters:

  • subscriber_class_name (String)

    The subscriber class name

  • event_hash (Hash)

    The event data as a hash



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'app/jobs/spree/events/subscriber_job.rb', line 31

def perform(subscriber_class_name, event_hash)
  subscriber_class = subscriber_class_name.constantize
  event = reconstruct_event(event_hash)

  if subscriber_class < Spree::Subscriber
    subscriber_class.new.call(event)
  elsif subscriber_class.respond_to?(:call)
    subscriber_class.call(event)
  else
    raise ArgumentError, "#{subscriber_class_name} is not a valid subscriber"
  end
rescue NameError => e
  Rails.error.report(e, context: {
    subscriber: subscriber_class_name,
    event_name: event_hash[:name] || event_hash['name']
  })
  raise
end