discourse/lib/rate_limiter/limit_exceeded.rb

37 lines
1003 B
Ruby
Raw Normal View History

# frozen_string_literal: true
2013-02-06 03:16:51 +08:00
class RateLimiter
2013-02-26 00:42:20 +08:00
# A rate limit has been exceeded.
class LimitExceeded < StandardError
2017-12-04 18:44:16 +08:00
attr_reader :type, :available_in
2017-07-28 09:20:09 +08:00
def initialize(available_in, type = nil)
2013-02-06 03:16:51 +08:00
@available_in = available_in
@type = type
2013-02-06 03:16:51 +08:00
end
def description
time_left =
if @available_in <= 3
I18n.t("rate_limiter.short_time")
elsif @available_in < 1.minute.to_i
I18n.t("rate_limiter.seconds", count: @available_in)
elsif @available_in < 1.hour.to_i
I18n.t("rate_limiter.minutes", count: (@available_in / 1.minute.to_i))
else
I18n.t("rate_limiter.hours", count: (@available_in / 1.hour.to_i))
end
if @type.present?
type_key = @type.tr("-", "_")
msg = I18n.t("rate_limiter.by_type.#{type_key}", time_left: time_left, default: "")
return msg if msg.present?
end
I18n.t("rate_limiter.too_many_requests", time_left: time_left)
end
2013-02-06 03:16:51 +08:00
end
2013-02-26 00:42:20 +08:00
end