class Batsir::Compiler::StageWorkerCompiler

Attributes

stage[RW]

Public Class Methods

new(stage) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 6
def initialize(stage)
  @stage = stage
end

Public Instance Methods

add_filter(filter_declaration, code) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 68
      def add_filter(filter_declaration, code)
        code << <<-EOF
            @filter_queue.add #{filter_declaration.filter.to_s}.new(#{filter_declaration.options.to_s})
        EOF
      end
add_notifier(code) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 94
      def add_notifier(code)
        code << <<-EOF
              @filter_queue.add_notifier notifier
        EOF
      end
add_transformers_to_notifier(code) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 80
      def add_transformers_to_notifier(code)
        if stage.notifier_transformers.any?
          stage.notifier_transformers.each do |transformer_declaration|
            code << <<-EOF
              notifier.add_transformer #{transformer_declaration.transformer}.new(#{transformer_declaration.options.to_s})
            EOF
          end
        else
          code << <<-EOF
              notifier.add_transformer Batsir::Transformers::JSONOutputTransformer.new
          EOF
        end
      end
compile() click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 10
def compile
  klazz_name = "#{stage.name.capitalize.gsub(' ','')}Worker"
  compile_worker_class(klazz_name)
end
compile_worker_class(klazz_name) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 15
def compile_worker_class(klazz_name)
  worker_class(klazz_name) do |code|
    stage.filter_declarations.each do |filter_declaration|
      add_filter(filter_declaration, code)
    end

    stage.conditional_notifiers.each do |conditional_notifier_declaration|
      conditional_notifier_declaration.compile(code, self)
    end

    stage.notifiers.each do |notifier, options_set|
      options_set.each do |options|
        new_notifier(notifier, options, code)
        add_transformers_to_notifier(code)
        add_notifier(code)
      end
    end
  end
end
new_notifier(notifier, options, code) click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 74
      def new_notifier(notifier, options, code)
        code << <<-EOF
          notifier = #{notifier.to_s}.new(#{options.to_s})
        EOF
      end
worker_class(klazz_name) { |code| ... } click to toggle source
# File lib/batsir/compiler/stage_worker_compiler.rb, line 35
      def worker_class(klazz_name, &block)
        code = <<-EOF
          class #{klazz_name}
            def self.stage_name
              "#{stage.name}"
            end

            def initialize
              @filter_queue = self.class.filter_queue
            end

            def self.filter_queue
              @filter_queue
            end

            def self.initialize_filter_queue
              @filter_queue = Batsir::FilterQueue.new
        EOF

        yield code

        code << <<-EOF
            end

            include Sidekiq::Worker
            include Batsir::StageWorker
          end

          #{klazz_name}.sidekiq_options(:queue => Batsir::Config.sidekiq_queue)
          #{klazz_name}
        EOF
      end