Sha256: 02e696a18a66059544c6c987e1b232938d4cb71b59ecfaf5796521d192471f64

Contents?: true

Size: 1.04 KB

Versions: 1

Compression:

Stored size: 1.04 KB

Contents

# frozen_string_literal: true

module Tobox
  class Worker
    def initialize(configuration)
      @wait_for_events_delay = configuration[:wait_for_events_delay]
      @handlers = configuration.handlers || {}
      @fetcher = Fetcher.new(configuration)
      @finished = false

      return unless (message_to_arguments = configuration.arguments_handler)

      define_singleton_method(:message_to_arguments, &message_to_arguments)
    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

1 entries across 1 versions & 1 rubygems

Version Path
tobox-0.1.0 lib/tobox/worker.rb