module RailsRateLimiter
Provides `rate_limit` callback to limit amount of requests and handle rate limit exceeding
Constants
- VERSION
Public Class Methods
included(base)
click to toggle source
# File lib/rails_rate_limiter.rb, line 10 def self.included(base) base.extend ClassMethods end
Private Instance Methods
check_rate_limits(strategy, limit, per, pattern, client, block)
click to toggle source
# File lib/rails_rate_limiter.rb, line 58 def check_rate_limits(strategy, limit, per, pattern, client, block) requester = compute_requester_pattern(pattern || request.remote_ip) strategy_class = "RailsRateLimiter::Strategies::#{strategy.classify}".constantize result = strategy_class.new(limit, per, requester, client).run return unless result.limit_exceeded? # instance_exec is using here because simple block.call executes block in # a wrong context that leads to not preventing action execution after render instance_exec result, &block end
compute_requester_pattern(requester)
click to toggle source
# File lib/rails_rate_limiter.rb, line 70 def compute_requester_pattern(requester) return "ip_#{requester}" unless requester.respond_to?(:call) # instance_exec is using here because simple block.call executes block in # a wrong context that leads to not preventing action execution after render "custom_#{instance_exec(&requester)}" end