diff --git a/README.md b/README.md index 2431616..61b43ac 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,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) @@ -83,6 +83,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