lib/google_translate_diff/redis_rate_limiter.rb
class GoogleTranslateDiff::RedisRateLimiter
extend Dry::Initializer
class RateLimitExceeded < StandardError; end
param :connection_pool
param :threshold, default: proc { 8000 }
param :interval, default: proc { 60 }
option :namespace, default: proc { GoogleTranslateDiff::CACHE_NAMESPACE }
def check(size)
connection_pool.with do |redis|
rate_limit = Ratelimit.new(namespace, redis: redis)
if rate_limit.exceeded?("call", threshold: threshold, interval: interval)
raise RateLimitExceeded
end
rate_limit.add size
end
end
end