Ensure ActionView::Base.field_error_proc is preserved when exceptions occur within with_simple_form_field_error_proc.

This commit is contained in:
Jim Benton 2012-05-09 10:34:03 -05:00
parent 1db2571827
commit b9eb68e2bb
2 changed files with 33 additions and 5 deletions

View File

@ -43,10 +43,12 @@ module SimpleForm
def with_simple_form_field_error_proc
default_field_error_proc = ::ActionView::Base.field_error_proc
::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
result = yield
::ActionView::Base.field_error_proc = default_field_error_proc
result
begin
::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
yield
ensure
::ActionView::Base.field_error_proc = default_field_error_proc
end
end
def simple_form_css_class(record, options)

View File

@ -109,11 +109,37 @@ class FormHelperTest < ActionView::TestCase
expected_error_proc = lambda {}
ActionView::Base.field_error_proc = expected_error_proc
result = nil
simple_form_for :user do |f|
simple_fields_for 'address' do
result = simple_fields_for 'address' do
'hello'
end
end
assert_equal 'hello', result
assert_equal expected_error_proc, ActionView::Base.field_error_proc
ensure
ActionView::Base.field_error_proc = previous_error_proc
end
end
test 'custom error proc survives an exception' do
previous_error_proc = ActionView::Base.field_error_proc
begin
expected_error_proc = lambda {}
ActionView::Base.field_error_proc = expected_error_proc
begin
simple_form_for :user do |f|
simple_fields_for 'address' do
raise 'an exception'
end
end
rescue StandardError => e
end
assert_equal expected_error_proc, ActionView::Base.field_error_proc
ensure