Sha256: 6742ecaa3448848c1903b11c93682ac243c85977cc146b023e0f82c49726e435

Contents?: true

Size: 1.25 KB

Versions: 1

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module AdvancedSneakersActiveJob
  module ActiveJobPatch
    extend ActiveSupport::Concern

    included do
      # AMQP message contains metadata which might be helpful for consumer (e.g. job.delivery_info.routing_key)
      attr_accessor :delivery_info, :headers

      class_attribute :publish_options, instance_accessor: false
    end

    module ClassMethods
      def deserialize(job_data)
        super(job_data).tap do |job|
          job.delivery_info = job_data['delivery_info']
          job.headers = job_data['headers']
        end
      end

      def queue_as(*args)
        super(*args)
        define_consumer
      end

      def message_options(options)
        raise ArgumentError, 'message_options accepts Hash argument only' unless options.is_a?(Hash)

        self.publish_options = options.symbolize_keys
      end

      private

      def define_consumer
        AdvancedSneakersActiveJob.define_consumer(queue_name: queue_name_without_prefix)
      end

      def queue_name_without_prefix
        name = queue_name.respond_to?(:call) ? queue_name.call : queue_name

        return name if queue_name_prefix.blank?

        name.to_s.sub([queue_name_prefix, queue_name_delimiter].join, '')
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
advanced-sneakers-activejob-0.2.2 lib/advanced_sneakers_activejob/active_job_patch.rb