From 4629beecd746e7b5da4a47fd57e679c1534771e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Mon, 7 Nov 2011 08:47:28 -0200 Subject: [PATCH] Cache failure_app action builder and pipe call through delegator. --- lib/devise.rb | 9 +++++---- lib/devise/delegator.rb | 7 +++++++ lib/devise/failure_app.rb | 3 ++- test/devise_test.rb | 2 +- 4 files changed, 15 insertions(+), 6 deletions(-) create mode 100644 lib/devise/delegator.rb diff --git a/lib/devise.rb b/lib/devise.rb index 34dc0ef6..506dab71 100644 --- a/lib/devise.rb +++ b/lib/devise.rb @@ -6,10 +6,11 @@ require 'set' require 'securerandom' module Devise - autoload :FailureApp, 'devise/failure_app' - autoload :OmniAuth, 'devise/omniauth' + autoload :Delegator, 'devise/delegator' + autoload :FailureApp, 'devise/failure_app' + autoload :OmniAuth, 'devise/omniauth' autoload :PathChecker, 'devise/path_checker' - autoload :Schema, 'devise/schema' + autoload :Schema, 'devise/schema' autoload :TestHelpers, 'devise/test_helpers' module Controllers @@ -407,7 +408,7 @@ module Devise # block. def self.configure_warden! #:nodoc: @@warden_configured ||= begin - warden_config.failure_app = Devise::FailureApp + warden_config.failure_app = Devise::Delegator.new warden_config.default_scope = Devise.default_scope warden_config.intercept_401 = false diff --git a/lib/devise/delegator.rb b/lib/devise/delegator.rb new file mode 100644 index 00000000..5e17623b --- /dev/null +++ b/lib/devise/delegator.rb @@ -0,0 +1,7 @@ +module Devise + class Delegator + def call(env) + Devise::FailureApp.call(env) + end + end +end \ No newline at end of file diff --git a/lib/devise/failure_app.rb b/lib/devise/failure_app.rb index c377bc8c..5f12bc53 100644 --- a/lib/devise/failure_app.rb +++ b/lib/devise/failure_app.rb @@ -15,7 +15,8 @@ module Devise delegate :flash, :to => :request def self.call(env) - action(:respond).call(env) + @respond ||= action(:respond) + @respond.call(env) end def self.default_url_options(*args) diff --git a/test/devise_test.rb b/test/devise_test.rb index 8c6acaa5..56c73ca9 100644 --- a/test/devise_test.rb +++ b/test/devise_test.rb @@ -25,7 +25,7 @@ class DeviseTest < ActiveSupport::TestCase end test 'stores warden configuration' do - assert_equal Devise::FailureApp, Devise.warden_config.failure_app + assert_kind_of Devise::Delegator, Devise.warden_config.failure_app assert_equal :user, Devise.warden_config.default_scope end