class WebShield::Config
Attributes
blocked_response[RW]
logger[RW]
shields[R]
store[RW]
user_parser[RW]
Public Class Methods
new()
click to toggle source
# File lib/web_shield/config.rb, line 8 def initialize @shields = [] @shield_counter = 0 @id_prefix = Time.now.to_f.to_s @user_parser = Proc.new {|req| req.ip } @blocked_response = Proc.new {|req| [429, {}, ['Too Many Requests']] } @logger = Logger.new($stdout) end
Public Instance Methods
build_shield(path_matcher, options, shield_class = ThrottleShield)
click to toggle source
return shield
# File lib/web_shield/config.rb, line 35 def build_shield(path_matcher, options, shield_class = ThrottleShield) shield_class.new(generate_id, path_matcher, options, self).tap do |shield| shields << shield logger.info("Build #{shield.shield_name} #{path_matcher} #{options}") end end
store=(store)
click to toggle source
# File lib/web_shield/config.rb, line 18 def store=(store) if store.respond_to?(:incr) @store = store else raise Error, 'Invalid store, interface :incr is need' end end
user_parser=(parser)
click to toggle source
# File lib/web_shield/config.rb, line 26 def user_parser=(parser) if parser.respond_to?(:call) @user_parser = parser else raise Error, 'Invalid parser, interface :cal is need' end end
Private Instance Methods
generate_id()
click to toggle source
# File lib/web_shield/config.rb, line 45 def generate_id "#{@id_prefix}-#{@shield_counter += 1}" end