Module: UniqueJob::Util

Includes:
Logging
Included in:
ClientMiddleware, ServerMiddleware
Defined in:
lib/unique_job/util.rb

Instance Method Summary collapse

Methods included from Logging

#logger

Instance Method Details

#perform(worker, job, &block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/unique_job/util.rb', line 8

def perform(worker, job, &block)
  if worker.respond_to?(:unique_key)
    key = worker.unique_key(*job['args'])
    logger.debug { "[UniqueJob] Unique key calculated context=#{@context} worker=#{job['class']} key=#{key}" }

    if key.nil? || key.to_s.empty?
      logger.warn { "[UniqueJob] Skip history check context=#{@context} worker=#{job['class']} key=#{key}" }
      yield
    else
      if @history.exists?(job['class'], key)
        logger.info { "[UniqueJob] Duplicate job skipped context=#{@context} worker=#{job['class']} key=#{key}" }
        perform_callback(worker, :after_skip, job['args'])
        nil
      else
        logger.debug { "[UniqueJob] Start job context=#{@context} worker=#{job['class']} key=#{key}" }
        ttl = worker.respond_to?(:unique_in) ? worker.unique_in : 3600
        @history.add(job['class'], key, ttl)
        yield
      end
    end
  else
    yield
  end
end

#perform_callback(worker, callback_name, args) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/unique_job/util.rb', line 33

def perform_callback(worker, callback_name, args)
  if worker.respond_to?(callback_name)
    parameters = worker.method(callback_name).parameters

    begin
      if parameters.empty?
        worker.send(callback_name)
      else
        worker.send(callback_name, *args)
      end
    rescue ArgumentError => e
      raise ArgumentError.new("[UniqueJob] Invalid parameters callback=#{callback_name}")
    end
  end
end