virtualstaticvoid/taskinator

View on GitHub
lib/taskinator/queues.rb

Summary

Maintainability
A
0 mins
Test Coverage
module Taskinator
  module Queues

    DefaultConfig = {
      :definition_queue => :default,
      :process_queue => :default,
      :task_queue => :default
    }.freeze

    def self.create_adapter(adapter, config={})
      begin
        LoggedAdapter.new(send("create_#{adapter}_adapter", config))
      rescue NoMethodError
        raise "The queue adapter `#{adapter}` is not yet supported or it's runtime isn't loaded."
      end
    end

    class LoggedAdapter < Delegator

      attr_reader :adapter

      def initialize(adapter)
        Taskinator.logger.info("Initialized '#{adapter.class.name}' queue adapter")
        @adapter = adapter
      end

      def __getobj__
        adapter
      end

      def enqueue_create_process(definition, uuid, args)
        Taskinator.logger.info("Enqueuing process creation for #{definition}")
        adapter.enqueue_create_process(definition, uuid, args)
      end

      def enqueue_task(task)
        Taskinator.logger.info("Enqueuing task #{task}")
        adapter.enqueue_task(task)
      end

    end

  end
end

require 'taskinator/queues/active_job' if defined?(ApplicationJob)
require 'taskinator/queues/delayed_job' if defined?(Delayed)
require 'taskinator/queues/resque' if defined?(Resque)
require 'taskinator/queues/sidekiq' if defined?(Sidekiq)