Sha256: cacdce316c08871696541fdb2ebecac372e7a44fb13e80dd1ddc6fd3c6a0e328

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Tobox
  class Worker
    attr_reader :label

    def initialize(label, configuration)
      @label = label
      @wait_for_events_delay = configuration[:wait_for_events_delay]
      @handlers = configuration.handlers || {}
      @fetcher = configuration.fetcher_class.new(label, configuration)
      @finished = false

      return unless (message_to_arguments = configuration.arguments_handler)

      define_singleton_method(:message_to_arguments, &message_to_arguments)
    end

    def finished?
      @finished
    end

    def finish!
      @finished = true
    end

    def work
      do_work until @finished
    end

    private

    def do_work
      return if @finished

      sum_fetched_events = @fetcher.fetch_events do |event|
        event_type = event[:type].to_sym
        args = message_to_arguments(event)

        if @handlers.key?(event_type)
          @handlers[event_type].each do |handler|
            handler.call(args)
          end
        end
      end

      return if @finished

      sleep(@wait_for_events_delay) if sum_fetched_events.zero?
    end

    def message_to_arguments(event)
      event
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tobox-0.5.1 lib/tobox/worker.rb
tobox-0.5.0 lib/tobox/worker.rb