Sha256: 8f2bf9648d31f8723070bea01c0a4116ab54295eac801978af138080cc907b64

Contents?: true

Size: 1.26 KB

Versions: 3

Compression:

Stored size: 1.26 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 |events|
        cs = @handlers.each_with_object({}) do |(callback, event_types), bucket|
          events.each do |event|
            (bucket[callback] ||= []) << message_to_arguments(event) if event_types.include?(event[:type].to_sym)
          end
        end

        cs.each do |callback, evs|
          callback.call(*evs)
        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

3 entries across 3 versions & 1 rubygems

Version Path
tobox-0.6.1 lib/tobox/worker.rb
tobox-0.6.0 lib/tobox/worker.rb
tobox-0.5.2 lib/tobox/worker.rb