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