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
|
def with_simple_form_field_error_proc
|
||||||
default_field_error_proc = ::ActionView::Base.field_error_proc
|
default_field_error_proc = ::ActionView::Base.field_error_proc
|
||||||
::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
|
begin
|
||||||
result = yield
|
::ActionView::Base.field_error_proc = FIELD_ERROR_PROC
|
||||||
::ActionView::Base.field_error_proc = default_field_error_proc
|
yield
|
||||||
result
|
ensure
|
||||||
|
::ActionView::Base.field_error_proc = default_field_error_proc
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def simple_form_css_class(record, options)
|
def simple_form_css_class(record, options)
|
||||||
|
|
|
@ -109,11 +109,37 @@ class FormHelperTest < ActionView::TestCase
|
||||||
expected_error_proc = lambda {}
|
expected_error_proc = lambda {}
|
||||||
ActionView::Base.field_error_proc = expected_error_proc
|
ActionView::Base.field_error_proc = expected_error_proc
|
||||||
|
|
||||||
|
result = nil
|
||||||
simple_form_for :user do |f|
|
simple_form_for :user do |f|
|
||||||
simple_fields_for 'address' do
|
result = simple_fields_for 'address' do
|
||||||
|
'hello'
|
||||||
end
|
end
|
||||||
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
|
assert_equal expected_error_proc, ActionView::Base.field_error_proc
|
||||||
|
|
||||||
ensure
|
ensure
|
||||||
|
|
Loading…
Reference in New Issue