Ensure ActionView::Base.field_error_proc is preserved when exceptions occur within with_simple_form_field_error_proc.
This commit is contained in:
parent
1db2571827
commit
b9eb68e2bb
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue