app/lib/shunter.rb
# frozen_string_literal: true
module Shunter
module_function
class ThrottleError < StandardError; end
BASE_LOGGER = ::Logger.new($stdout)
ONE_MINUTE = 60
ONE_HUNDRED_REQUESTS = 100
BASE_CONNECTION = {
host: ENV['shunter_redis_host'] || 'redis',
port: (ENV['shunter_redis_port'] || '6379').to_i,
}.freeze
def default_error_message
"Session limit exceeded. Current limit is #{default_threshold} in #{default_timespan} seconds"
end
def default_timespan
ENV['shunter_default_timespan'] || ONE_MINUTE
end
def default_threshold
ENV['shunter_default_threshold'] || ONE_HUNDRED_REQUESTS
end
def default_adapter
ENV['shunter_default_adapter'] || 'Shunter::Adapters::Redis'
end
def feature_enabled?
ActiveModel::Type::Boolean.new.cast(ENV['shunter_enabled'] || 'false')
end
end