Sha256: 82ce0e5448eae1b0cafe7bb8eea67157805e901a2d303063c177605aa3847cbd

Contents?: true

Size: 1.61 KB

Versions: 58

Compression:

Stored size: 1.61 KB

Contents

# frozen_string_literal: true

require 'active_support/current_attributes'
require_relative 'current_attributes/loading'
require_relative 'current_attributes/persistence'

# This code is based on Sidekiqs approach to persisting current attributes
# @see https://github.com/sidekiq/sidekiq/blob/main/lib/sidekiq/middleware/current_attributes.rb
module Karafka
  module ActiveJob
    # Module that allows to persist current attributes on Karafka jobs
    module CurrentAttributes
      # Allows for persistence of given current attributes via AJ + Karafka
      #
      # @param klasses [Array<String, Class>] classes or names of the current attributes classes
      def persist(*klasses)
        # Support for providing multiple classes
        klasses = Array(klasses).flatten

        [Dispatcher, Consumer]
          .reject { |expandable| expandable.respond_to?(:_cattr_klasses) }
          .each { |expandable| expandable.class_attribute :_cattr_klasses, default: {} }

        # Do not double inject in case of running persist multiple times
        Dispatcher.prepend(Persistence) unless Dispatcher.ancestors.include?(Persistence)
        Consumer.prepend(Loading) unless Consumer.ancestors.include?(Loading)

        klasses.map(&:to_s).each do |stringified_klass|
          # Prevent registering same klass multiple times
          next if Dispatcher._cattr_klasses.value?(stringified_klass)

          key = "cattr_#{Dispatcher._cattr_klasses.count}"

          Dispatcher._cattr_klasses[key] = stringified_klass
          Consumer._cattr_klasses[key] = stringified_klass
        end
      end

      module_function :persist
    end
  end
end

Version data entries

58 entries across 58 versions & 1 rubygems

Version Path
karafka-2.4.17 lib/karafka/active_job/current_attributes.rb
karafka-2.4.16 lib/karafka/active_job/current_attributes.rb
karafka-2.4.15 lib/karafka/active_job/current_attributes.rb
karafka-2.4.14 lib/karafka/active_job/current_attributes.rb
karafka-2.4.13 lib/karafka/active_job/current_attributes.rb
karafka-2.4.12 lib/karafka/active_job/current_attributes.rb
karafka-2.4.11 lib/karafka/active_job/current_attributes.rb
karafka-2.4.10 lib/karafka/active_job/current_attributes.rb
karafka-2.4.9 lib/karafka/active_job/current_attributes.rb
karafka-2.4.8 lib/karafka/active_job/current_attributes.rb
karafka-2.4.7 lib/karafka/active_job/current_attributes.rb
karafka-2.4.6 lib/karafka/active_job/current_attributes.rb
karafka-2.4.5 lib/karafka/active_job/current_attributes.rb
karafka-2.4.4 lib/karafka/active_job/current_attributes.rb
karafka-2.4.3 lib/karafka/active_job/current_attributes.rb
karafka-2.4.0 lib/karafka/active_job/current_attributes.rb
karafka-2.4.0.rc1 lib/karafka/active_job/current_attributes.rb
karafka-2.3.4 lib/karafka/active_job/current_attributes.rb
karafka-2.4.0.beta2 lib/karafka/active_job/current_attributes.rb
karafka-2.4.0.beta1 lib/karafka/active_job/current_attributes.rb