Sha256: b912e993e572e01a449064fb99e3b800f66b68c23de70abab7564f786add4b8e

Contents?: true

Size: 1.88 KB

Versions: 5

Compression:

Stored size: 1.88 KB

Contents

# frozen_string_literal: true

module Karafka
  # Internal stuff related to workers
  module Workers
    # Builder is used to check if there is a proper consumer with the same name as
    # a consumer and if not, it will create a default one using Karafka::BaseWorker
    # This is used as a building layer between consumers and workers. it will be only used
    # when user does not provide his own worker that should perform consumer stuff
    class Builder
      # @param consumer_class [Karafka::BaseConsumer] descendant of Karafka::BaseConsumer
      # @example Create a worker builder
      #   Karafka::Workers::Builder.new(SuperConsumer)
      def initialize(consumer_class)
        @consumer_class = consumer_class
      end

      # @return [Class] Sidekiq worker class that already exists or new build based
      #   on the provided consumer_class name
      # @example Consumer: SuperConsumer
      #   build #=> SuperWorker
      # @example Consumer: Videos::NewVideosConsumer
      #   build #=> Videos::NewVideosWorker
      def build
        return matcher.match if matcher.match
        klass = Class.new(base)
        matcher.scope.const_set(matcher.name, klass)
      end

      private

      # @return [Class] descendant of Karafka::BaseWorker from which all other workers
      #   should inherit
      # @raise [Karafka::Errors::BaseWorkerDescentantMissing] raised when Karafka cannot detect
      #   direct Karafka::BaseWorker descendant from which it could build workers
      def base
        Karafka::BaseWorker.subclasses.first || raise(Errors::BaseWorkerDescentantMissing)
      end

      # @return [Karafka::Helpers::ClassMatcher] matcher instance for matching between consumer
      #   and appropriate worker
      def matcher
        @matcher ||= Helpers::ClassMatcher.new(
          @consumer_class,
          from: 'Consumer',
          to: 'Worker'
        )
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
karafka-sidekiq-backend-1.2.0 lib/karafka/workers/builder.rb
karafka-sidekiq-backend-1.2.0.beta4 lib/karafka/workers/builder.rb
karafka-sidekiq-backend-1.2.0.beta3 lib/karafka/workers/builder.rb
karafka-sidekiq-backend-1.2.0.beta2 lib/karafka/workers/builder.rb
karafka-sidekiq-backend-1.2.0.beta1 lib/karafka/workers/builder.rb