module SimpleForm::ActionViewExtensions::FormHelper

def simple_fields_for(record_name, record_object = nil, options = {}, &block)

def simple_fields_for(record_name, record_object = nil, options = {}, &block)
  options, record_object = record_object, nil if record_object.is_a?(Hash) && record_object.extractable_options?
  options[:builder] ||= SimpleForm::FormBuilder
  with_simple_form_field_error_proc do
    fields_for(record_name, record_object, options, &block)
  end
end

def simple_form_css_class(record, options)

def simple_form_css_class(record, options)
  html_options = options[:html]
  as = options[:as]
  if html_options.key?(:class)
    html_options[:class]
  elsif record.is_a?(String) || record.is_a?(Symbol)
    as || record
  else
    record = record.last if record.is_a?(Array)
    action = record.respond_to?(:persisted?) && record.persisted? ? :edit : :new
    as ? "#{action}_#{as}" : dom_class(record, action)
  end
end

def simple_form_for(record, options={}, &block)

def simple_form_for(record, options={}, &block)
  options[:builder] ||= SimpleForm::FormBuilder
  options[:html] ||= {}
  unless options[:html].key?(:novalidate)
    options[:html][:novalidate] = !SimpleForm.browser_validations
  end
  options[:html][:class] = [SimpleForm.form_class, simple_form_css_class(record, options)].compact.join(" ")
  with_simple_form_field_error_proc do
    form_for(record, options, &block)
  end
end

def with_simple_form_field_error_proc

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
end