diff --git a/lib/rack/attack.rb b/lib/rack/attack.rb index 1f3b7f0..39737d1 100644 --- a/lib/rack/attack.rb +++ b/lib/rack/attack.rb @@ -3,7 +3,10 @@ module Rack class Attack class << self - def block + attr_reader :blocks, :throttles, :whitelists + + def block(name, &block) + (@blocks ||= {})[name] = block end def throttle diff --git a/spec/rack_attack_spec.rb b/spec/rack_attack_spec.rb index 5cdd426..03aafe3 100644 --- a/spec/rack_attack_spec.rb +++ b/spec/rack_attack_spec.rb @@ -3,6 +3,10 @@ require_relative 'spec_helper' describe 'Rack::Attack' do include Rack::Test::Methods + before do + Rack::Attack.block("ip 1.2.3.4") {|req| req.ip == '1.2.3.4' } + end + def app Rack::Builder.new { use Rack::Attack @@ -10,9 +14,15 @@ describe 'Rack::Attack' do }.to_app end + it 'has a block' do + Rack::Attack.blocks.class.must_equal Hash + end + it "says hello" do get '/' last_response.status.must_equal 200 last_response.body.must_equal 'Hello World' end + + end diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb index afb51d8..8cd7c86 100644 --- a/spec/spec_helper.rb +++ b/spec/spec_helper.rb @@ -2,6 +2,6 @@ require "rubygems" require "bundler/setup" require "minitest/autorun" -require "rack" require "rack/test" + require "rack/attack"