Sha256: 4ae156b0eea631ef744271ea5b838fad17e6d72f793ee11a04f87cb984cbb1e3

Contents?: true

Size: 903 Bytes

Versions: 6

Compression:

Stored size: 903 Bytes

Contents

require "resque/throttle"

module Resque
  extend self

  # Raised when trying to create a job that is throttled
  class ThrottledError < RuntimeError; end
      
  def enqueue_with_throttle(klass, *args)
    if should_throttle?(klass, *args)
      raise ThrottledError.new("#{klass} with key #{klass.key(*args)} has exceeded it's throttle limit")
    end
    enqueue_without_throttle(klass, *args)
  end
  alias_method :enqueue_without_throttle, :enqueue
  alias_method :enqueue, :enqueue_with_throttle

  private
   
  def should_throttle?(klass, *args)
    return false if !throttle_job?(klass) || klass.disabled
    return true if key_found?(klass, *args)
    redis.set(klass.key(*args), true, klass.can_run_every)
    return false
  end

  def key_found?(klass, *args)
     redis.get(klass.key(*args))
  end

  def throttle_job?(klass)
    klass.ancestors.include?(Resque::ThrottledJob)  
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
resque-throttle-0.2.19 lib/resque/resque.rb
resque-throttle-0.2.18 lib/resque/resque.rb
resque-throttle-0.2.17 lib/resque/resque.rb
resque-throttle-0.2.16 lib/resque/resque.rb
resque-throttle-0.2.15 lib/resque/resque.rb
resque-throttle-0.2.14 lib/resque/resque.rb