Changes and tests

This commit is contained in:
fatkodima 2019-09-18 16:01:51 +03:00
parent b512e05786
commit bdfb01ab5b
10 changed files with 62 additions and 28 deletions

View file

@ -17,24 +17,20 @@ appraise "rack_1_6" do
gem "rack-test", ">= 0.6" gem "rack-test", ">= 0.6"
end end
appraise 'rails_6_0' do appraise 'rails_6-0' do
gem 'actionpack', '~> 6.0.0' gem 'railties', '~> 6.0.0'
gem 'activesupport', '~> 6.0.0'
end end
appraise 'rails_5-2' do appraise 'rails_5-2' do
gem 'actionpack', '~> 5.2.0' gem 'railties', '~> 5.2.0'
gem 'activesupport', '~> 5.2.0'
end end
appraise 'rails_5-1' do appraise 'rails_5-1' do
gem 'actionpack', '~> 5.1.0' gem 'railties', '~> 5.1.0'
gem 'activesupport', '~> 5.1.0'
end end
appraise 'rails_4-2' do appraise 'rails_4-2' do
gem 'actionpack', '~> 4.2.0' gem 'railties', '~> 4.2.0'
gem 'activesupport', '~> 4.2.0'
# Override rack-test version constraint by making it more loose # Override rack-test version constraint by making it more loose
# so it's compatible with actionpack 4.2.x # so it's compatible with actionpack 4.2.x

View file

@ -2,8 +2,7 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "actionpack", "~> 4.2.0" gem "railties", "~> 4.2.0"
gem "activesupport", "~> 4.2.0"
gem "rack-test", ">= 0.6" gem "rack-test", ">= 0.6"
gemspec path: "../" gemspec path: "../"

View file

@ -2,7 +2,6 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "actionpack", "~> 5.1.0" gem "railties", "~> 5.1.0"
gem "activesupport", "~> 5.1.0"
gemspec path: "../" gemspec path: "../"

View file

@ -2,7 +2,6 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "actionpack", "~> 5.2.0" gem "railties", "~> 5.2.0"
gem "activesupport", "~> 5.2.0"
gemspec path: "../" gemspec path: "../"

View file

@ -2,7 +2,6 @@
source "https://rubygems.org" source "https://rubygems.org"
gem "actionpack", "~> 6.0.0" gem "railties", "~> 6.0.0"
gem "activesupport", "~> 6.0.0"
gemspec path: "../" gemspec path: "../"

View file

@ -6,7 +6,7 @@ require 'rack/attack/path_normalizer'
require 'rack/attack/request' require 'rack/attack/request'
require "ipaddr" require "ipaddr"
require 'rack/attack/railtie' if defined?(Rails) require 'rack/attack/railtie' if defined?(::Rails)
module Rack module Rack
class Attack class Attack

View file

@ -2,10 +2,23 @@
module Rack module Rack
class Attack class Attack
class Railtie < Rails::Railtie class Railtie < ::Rails::Railtie
config.after_initialize do |app| initializer 'rack.attack.middleware', after: :load_config_initializers, before: :build_middleware_stack do |app|
include_middleware = app.middleware.none? { |m| m == Rack::Attack } middlewares = app.config.middleware
app.middleware.use(Rack::Attack) if include_middleware
operations =
if Gem::Version.new(Rails::VERSION::STRING) >= Gem::Version.new("5")
middlewares.send(:operations) + middlewares.send(:delete_operations)
else
middlewares.instance_variable_get(:@operations)
end
use_middleware = operations.none? do |operation|
middleware = operation[1]
middleware.include?(Rack::Attack)
end
middlewares.use(Rack::Attack) if use_middleware
end end
end end
end end

View file

@ -46,8 +46,5 @@ Gem::Specification.new do |s|
s.add_development_dependency 'byebug', '~> 11.0' s.add_development_dependency 'byebug', '~> 11.0'
end end
# The following are potential runtime dependencies users may have, s.add_development_dependency 'railties', '>= 4.2'
# which rack-attack uses only for testing compatibility in test suite.
s.add_development_dependency 'actionpack', '~> 5.2'
s.add_development_dependency 'activesupport', '~> 5.2'
end end

View file

@ -0,0 +1,32 @@
# frozen_string_literal: true
require_relative "../spec_helper"
if defined?(Rails) && Gem::Version.new(Rails::VERSION::STRING) >= Gem::Version.new("5")
describe "Middleware for Rails" do
before do
@app = Class.new(Rails::Application) do
config.eager_load = false
config.logger = Logger.new(nil) # avoid creating the log/ directory automatically
config.cache_store = :null_store # avoid creating tmp/ directory for cache
end
end
it "is enabled by default" do
@app.initialize!
assert_equal 1, @app.middleware.count(Rack::Attack)
end
it "is not added when it was added explicitly" do
@app.config.middleware.use(Rack::Attack)
@app.initialize!
assert_equal 1, @app.middleware.count(Rack::Attack)
end
it "is not added when it was explicitly deleted" do
@app.config.middleware.delete(Rack::Attack)
@app.initialize!
refute @app.middleware.include?(Rack::Attack)
end
end
end

View file

@ -5,8 +5,7 @@ require "bundler/setup"
require "minitest/autorun" require "minitest/autorun"
require "minitest/pride" require "minitest/pride"
require "rack/test" require "rack/test"
require 'active_support' require "rails"
require 'action_dispatch'
require "rack/attack" require "rack/attack"
@ -30,6 +29,7 @@ class MiniTest::Spec
include Rack::Test::Methods include Rack::Test::Methods
before do before do
Rails.cache = nil
@_original_throttled_response = Rack::Attack.throttled_response @_original_throttled_response = Rack::Attack.throttled_response
@_original_blocklisted_response = Rack::Attack.blocklisted_response @_original_blocklisted_response = Rack::Attack.blocklisted_response
end end