Class: RubyRateLimiter::TokenBucket
- Inherits:
-
Object
- Object
- RubyRateLimiter::TokenBucket
- Extended by:
- Forwardable
- Defined in:
- lib/ruby_rate_limiter/token_bucket.rb
Constant Summary collapse
- DEFAULT_BUCKET_SIZE =
10
- DEFAULT_REFILL_RATE =
1
- DEFAULT_STORAGE =
RubyRateLimiter::Storage::RedisStorage.new
- TIME_UNITS =
{ second: 1, minute: 60, hour: 3600 }.freeze
Instance Method Summary collapse
- #allow_request? ⇒ Boolean
-
#initialize(user_identifier:, bucket_size: DEFAULT_BUCKET_SIZE, refill_rate: DEFAULT_REFILL_RATE, time_unit: :second, storage: DEFAULT_STORAGE) ⇒ TokenBucket
constructor
A new instance of TokenBucket.
Constructor Details
#initialize(user_identifier:, bucket_size: DEFAULT_BUCKET_SIZE, refill_rate: DEFAULT_REFILL_RATE, time_unit: :second, storage: DEFAULT_STORAGE) ⇒ TokenBucket
Returns a new instance of TokenBucket.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/ruby_rate_limiter/token_bucket.rb', line 21 def initialize( user_identifier:, bucket_size: DEFAULT_BUCKET_SIZE, refill_rate: DEFAULT_REFILL_RATE, time_unit: :second, storage: DEFAULT_STORAGE ) @user_id = user_identifier @bucket_size = bucket_size @refill_rate_per_second = refill_rate.to_f / TIME_UNITS[time_unit] @storage = storage @logger = Logger.new(STDOUT) @logger.level = Logger::DEBUG initialize_bucket end |
Instance Method Details
#allow_request? ⇒ Boolean
38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/ruby_rate_limiter/token_bucket.rb', line 38 def allow_request? refill_tokens tokens = get_bucket_size @logger.info "Allow request: tokens before = #{tokens}" return false if tokens < 1 update_bucket_size(tokens - 1) @logger.info "Allow request: tokens after = #{get_bucket_size}" true end |