Sha256: af9d44d98064cd54eb4acf47f486e3a4883256748cfceb3f028d31bd40fe3ff1

Contents?: true

Size: 942 Bytes

Versions: 2

Compression:

Stored size: 942 Bytes

Contents

module PubsubNotifier
  module Broadcasters
    class ActiveJobBroadcaster < Base
      def broadcast(subscriber, publisher, event, args)
        configured_job.perform_later(subscriber.name, event, args)
      rescue ActiveJob::SerializationError => e
        # NOTE: Fallback if global_id is blank
        logger.warn { e.inspect }
        configured_job.perform_now(subscriber.name, event, *args)
      end

      private

        def configured_job
          BroadcastJob.set(options)
        end

        def default_options
          { wait: nil, wait_until: nil, queue: :default }
        end

        class BroadcastJob < ::ActiveJob::Base
          def perform(subscriber_name, event, args)
            subscriber = subscriber_name.constantize
            subscriber.public_send(event, *args)
          end
        end
    end
  end
end

PubsubNotifier.register_broadcaster :async, PubsubNotifier::Broadcasters::ActiveJobBroadcaster

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
pubsub_notifier-0.1.2 lib/pubsub_notifier/broadcasters/active_job_broadcaster.rb
pubsub_notifier-0.1.1 lib/pubsub_notifier/broadcasters/active_job_broadcaster.rb