Sha256: a35c23a731d81ee33081f483ac6438cbffc634c9bc16323beb75c6e2f7e16bcb

Contents?: true

Size: 1.46 KB

Versions: 8

Compression:

Stored size: 1.46 KB

Contents

require "active_support/current_attributes"

module Sidekiq
  ##
  # Automatically save and load any current attributes in the execution context
  # so context attributes "flow" from Rails actions into any associated jobs.
  # This can be useful for multi-tenancy, i18n locale, timezone, any implicit
  # per-request attribute. See +ActiveSupport::CurrentAttributes+.
  #
  # @example
  #
  #   # in your initializer
  #   require "sidekiq/middleware/current_attributes"
  #   Sidekiq::CurrentAttributes.persist("Myapp::Current")
  #
  module CurrentAttributes
    class Save
      include Sidekiq::ClientMiddleware

      def initialize(cattr)
        @strklass = cattr
      end

      def call(_, job, _, _)
        if !job.has_key?("cattr")
          attrs = @strklass.constantize.attributes
          # Retries can push the job N times, we don't
          # want retries to reset cattr. #5692, #5090
          job["cattr"] = attrs if attrs.any?
        end
        yield
      end
    end

    class Load
      include Sidekiq::ServerMiddleware

      def initialize(cattr)
        @strklass = cattr
      end

      def call(_, job, _, &block)
        if job.has_key?("cattr")
          @strklass.constantize.set(job["cattr"], &block)
        else
          yield
        end
      end
    end

    def self.persist(klass, config = Sidekiq.default_configuration)
      config.client_middleware.add Save, klass.to_s
      config.server_middleware.add Load, klass.to_s
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
sidekiq-7.1.0 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.9 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.8 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.7 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.6 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.5 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.4 lib/sidekiq/middleware/current_attributes.rb
sidekiq-7.0.3 lib/sidekiq/middleware/current_attributes.rb