class Sidekiq::RateLimiter::Fetch

Public Instance Methods

limit(work) click to toggle source
# File lib/sidekiq-rate-limiter/fetch.rb, line 14
def limit(work)
  message = JSON.parse(work.respond_to?(:message) ? work.message : work.job) rescue {}

  args      = message['args']
  klass     = message['class']
  rate      = Rate.new(message)

  return work unless !!(klass && rate.valid?)

  limit     = rate.limit
  interval  = rate.interval
  name      = rate.name

  options = {
    :limit    => (limit.respond_to?(:call) ? limit.call(*args) : limit).to_i,
    :interval => (interval.respond_to?(:call) ? interval.call(*args) : interval).to_i,
    :name     => (name.respond_to?(:call) ? name.call(*args) : name).to_s,
  }

  Sidekiq.redis do |conn|
    lim = Limit.new(conn, options)
    if lim.exceeded?(klass)
      conn.lpush("queue:#{work.queue_name}", work.respond_to?(:message) ? work.message : work.job)
      nil
    else
      lim.add(klass)
      work
    end
  end
end
retrieve_work() click to toggle source
Calls superclass method
# File lib/sidekiq-rate-limiter/fetch.rb, line 10
def retrieve_work
  limit(super)
end