class RateLimitControl
Constants
- VERSION
Attributes
action[R]
allowed_requests[R]
session_counter[R]
storage[R]
timeout[R]
Public Class Methods
new(configs) { || ... }
click to toggle source
# File lib/rate_limit_control.rb, line 6 def initialize(configs) @action = "locked_#{configs[:action]}_#{configs[:id]}_#{Time.now.to_s}" @allowed_requests = configs[:allowed_requests] @session_counter = "#{configs[:action]}_#{configs[:id]}" @storage = configs[:storage] @timeout = configs[:timeout] call yield end
Private Instance Methods
action_blocked?()
click to toggle source
# File lib/rate_limit_control.rb, line 57 def action_blocked? storage.get(action) != nil end
action_blocked_log()
click to toggle source
# File lib/rate_limit_control.rb, line 53 def action_blocked_log puts "Action is blocked" if action_blocked? end
action_executed_log()
click to toggle source
# File lib/rate_limit_control.rb, line 61 def action_executed_log puts action puts "Request executed at #{Time.now.to_s}" end
action_timeout()
click to toggle source
# File lib/rate_limit_control.rb, line 66 def action_timeout actions_ahead = (total_of_actions_executed / allowed_requests) || 1 actions_ahead * timeout end
actions_exceed_the_total_of_allowed?()
click to toggle source
# File lib/rate_limit_control.rb, line 44 def actions_exceed_the_total_of_allowed? total_of_actions_executed >= allowed_requests end
call()
click to toggle source
# File lib/rate_limit_control.rb, line 18 def call if session_counter_created? increment_session_counter set_action_as_blocked if actions_exceed_the_total_of_allowed? else create_session_counter end action_blocked_log while action_blocked?; end action_executed_log end
create_session_counter()
click to toggle source
# File lib/rate_limit_control.rb, line 48 def create_session_counter storage.set(session_counter, 0) storage.expire(session_counter, timeout) end
increment_session_counter()
click to toggle source
# File lib/rate_limit_control.rb, line 35 def increment_session_counter storage.incr(session_counter) end
session_counter_created?()
click to toggle source
# File lib/rate_limit_control.rb, line 31 def session_counter_created? storage.get(session_counter) != nil end
set_action_as_blocked()
click to toggle source
# File lib/rate_limit_control.rb, line 39 def set_action_as_blocked storage.set(action, true) storage.expire(action, action_timeout) end
total_of_actions_executed()
click to toggle source
# File lib/rate_limit_control.rb, line 71 def total_of_actions_executed storage.get(session_counter).to_i end