module RailsLimiter::RailsLimiter

Public Instance Methods

limit(key, max, expire_in, url) click to toggle source
# File lib/rails_limiter/rails_limiter.rb, line 4
def limit(key, max, expire_in, url)
  valid, ttl  = process_limit(key, max, expire_in)

  unless valid
    render :status => 429, :json => {:message => "You exceeded your requests limit of #{max}. Try again in #{ttl} seconds"}
    return
  end
end

Private Instance Methods

get_connexion() click to toggle source
# File lib/rails_limiter/rails_limiter.rb, line 14
def get_connexion
  @connexion  ||= RailsLimiter::Init.configuration.connexion
end
process_limit(key, max, expire_in = 1.day.seconds.to_i) click to toggle source
# File lib/rails_limiter/rails_limiter.rb, line 18
def process_limit(key, max, expire_in = 1.day.seconds.to_i)
  get_connexion

  val = @connexion.get(key)

  if val.blank?
    # si connexion ne possède pas de valeur pour la clé, on la créée
    @connexion.set(key, 1)
    @connexion.expire(key, expire_in)

    [true, 0]
  elsif val.to_i < max
    # si connexion possède la clé, on incrémente
    @connexion.incr(key)
    [true, 0]
  else
    # sauf si on a atteint la limite
    [false, @connexion.ttl(key)]
  end
end