Sha256: b1c8cd425a5841dbef1d9811d7058f4957de7f83e4d7dedc4b272fd96e071646

Contents?: true

Size: 1.72 KB

Versions: 11

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

module MrCommon
  # Default form builder for the app. Slightly customized to provide methods for
  # .form-group divs and error text
  class ApplicationFormBuilder < ActionView::Helpers::FormBuilder
    # wraps a block in a .form-group div, applies an .error class when the given field
    # has errors
    #
    #   <%= f.form_group :email do %>
    #     <%= f.label :email %>
    #     <%= f.email_field :email, class: 'form-control' %>
    #   <% end %>
    #
    #  =>
    #   <div class="form-group">
    #     <label for="Registration_email">Email</label>
    #     <input class="form-control" value="asdf@asdfasdf" name="Registration[email]" id="Registration_email" type="email">
    #   </div>
    #
    def form_group(method_or_methods = nil, options = {}, &block)
      div_classes = ["form-group"]
      div_classes << "required" if options[:required]
      div_classes << options.delete(:class) if options[:class]
      div_classes << "error" if _error_for_any?(method_or_methods)
      div_classes = div_classes.join(" ")


      @template.content_tag(:div, class: div_classes) do
        yield block
      end
    end

    def _error_for_any?(methods)
      Array[methods].flatten.find { |m| object.errors[m].any? }
    end

    # Outputs an error message tag when errors are present on the given field
    #
    #   <%= f.errors :email %>
    #
    #   =>
    #     <div class="error-message">is invalid</div>
    #
    def errors(method, options = {})
      return nil unless object.errors[method].any?

      text = options.delete(:text) || object.errors[method].join(", ")
      div_classes = options.delete(:class) || "error-message"
      @template.content_tag(:div, text, class: div_classes)
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
mr_common-2.1.0 app/form/mr_common/application_form_builder.rb
mr_common-2.0.0 app/form/mr_common/application_form_builder.rb
mr_common-1.3.0 app/form/mr_common/application_form_builder.rb
mr_common-1.2.0 app/form/mr_common/application_form_builder.rb
mr_common-1.1.0 app/form/mr_common/application_form_builder.rb
mr_common-1.0.5 app/form/mr_common/application_form_builder.rb
mr_common-1.0.4 app/form/mr_common/application_form_builder.rb
mr_common-1.0.3 app/form/mr_common/application_form_builder.rb
mr_common-1.0.2 app/form/mr_common/application_form_builder.rb
mr_common-1.0.1 app/form/mr_common/application_form_builder.rb
mr_common-1.0.0 app/form/mr_common/application_form_builder.rb