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