From d5514bf916e3dff38c4e29172547085a2105898e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benoit=20Be=CC=81ne=CC=81zech?= Date: Thu, 24 Oct 2013 16:46:45 +0200 Subject: [PATCH] Add options for FailureApp's i18n_message. Similar #1633 --- lib/devise/failure_app.rb | 9 +++++++-- test/failure_app_test.rb | 11 +++++++++++ test/support/locale/en.yml | 4 ++++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/lib/devise/failure_app.rb b/lib/devise/failure_app.rb index 08b02568..60092e32 100644 --- a/lib/devise/failure_app.rb +++ b/lib/devise/failure_app.rb @@ -68,8 +68,13 @@ module Devise message = warden_message || default || :unauthenticated if message.is_a?(Symbol) - I18n.t(:"#{scope}.#{message}", :resource_name => scope, - :scope => "devise.failure", :default => [message]) + options = {} + options[:resource_name] = scope + options[:scope] = "devise.failure" + options[:default] = [message] + options = i18n_options(options) if respond_to?(:i18n_options, true) + + I18n.t(:"#{scope}.#{message}", options) else message.to_s end diff --git a/test/failure_app_test.rb b/test/failure_app_test.rb index 36f532b3..bab34c28 100644 --- a/test/failure_app_test.rb +++ b/test/failure_app_test.rb @@ -8,6 +8,12 @@ class FailureTest < ActiveSupport::TestCase end end + class FailureWithI18nOptions < Devise::FailureApp + def i18n_options(options) + options.merge(:name => 'Steve') + end + end + def self.context(name, &block) instance_eval(&block) end @@ -67,6 +73,11 @@ class FailureTest < ActiveSupport::TestCase assert_equal 'http://test.host/users/sign_in', @response.second["Location"] end + test 'uses custom i18n options' do + call_failure('warden' => OpenStruct.new(:message => :does_not_exist), :app => FailureWithI18nOptions) + assert_equal 'User Steve does not exist', @request.flash[:alert] + end + test 'uses the proxy failure message as string' do call_failure('warden' => OpenStruct.new(:message => 'Hello world')) assert_equal 'Hello world', @request.flash[:alert] diff --git a/test/support/locale/en.yml b/test/support/locale/en.yml index e4501ceb..e1f977b3 100644 --- a/test/support/locale/en.yml +++ b/test/support/locale/en.yml @@ -1,4 +1,8 @@ en: + devise: + failure: + user: + does_not_exist: "User %{name} does not exist" errors: messages: taken: "has already been taken"