diff --git a/README.md b/README.md index 7703b1a..faaf8e6 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ The algorithm is actually more concise in code: See [Rack::Attack.call](https:// ```ruby def call(env) - req = Rack::Request.new(env) + req = Rack::Attack::Request.new(env) if whitelisted?(req) @app.call(env) @@ -72,6 +72,10 @@ def call(env) end ``` +Note: `Rack::Attack::Request` is just a subclass of `Rack::Attack` so that you +can cleanly [monkey patch helper methods] onto the +[request object](https://github.com/kickstarter/rack-attack/blob/master/lib/rack/attack/request.rb). + ## About Tracks `Rack::Attack.track` doesn't affect request processing. Tracks are an easy way to log and measure requests matching arbitrary attributes. diff --git a/lib/rack/attack/request.rb b/lib/rack/attack/request.rb index 603a126..0dc9681 100644 --- a/lib/rack/attack/request.rb +++ b/lib/rack/attack/request.rb @@ -1,3 +1,16 @@ +# Rack::Attack::Request is the same as ::Rack::Request by default. +# +# This is a safe place to add custom helper methods to the request object +# through monkey patching: +# +# class Rack::Attack::Request < ::Rack::Request +# def localhost? +# ip == "127.0.0.1" +# end +# end +# +# Rack::Attack.whitelist("localhost") {|req| req.localhost? } +# module Rack class Attack class Request < ::Rack::Request