class ComfyBootstrapForm::BootstrapOptions

Container for bootstrap specific form builder options. It controls options that define form layout and grid sizing. They are passed-in into form helper and field helpers via `:bootstrap` option. For example:

bootstrap_form_with scope: :login, url: "/login", bootstrap: {layout: :inline} do |f|
   f.text_field :username, bootstrap: {label: {text: "Your username"}}
end

Attributes

append[RW]
check_inline[RW]

Options to render checkboxes and radio buttons inline. Default is false. Example:

form.collection_radio_buttons :choices, ["yes", "no"], :to_s, :to_s, bootstrap: {check_inline: true}
control_col_class[RW]

CSS class for control column when using horizontal form. Default: “col-sm-10”

custom_control[RW]

Enables special input styling for file_field, radio and checkboxes. Example:

form.file_file :photo, bootstrap: {custom_control: true}
disabled[RW]

When set to `true` only default rails form builder element is rendered.

error[RW]

Manually rendering the error message. Example:

form.text_field :foo, bootstrap: {error: "Error Message"}
help[RW]

Help text that goes under the form field. Example usage:

form.password_field :password, bootstrap: {help: "Password should be more than 8 characters in length"}
inline_margin_class[RW]

CSS class used to space out form groups for inline forms. Default: “mr-sm-2”

label[R]

Label specific options. Default is and empty hash. Options are as follows:

text:   "Label Text"  - override automatically generated label text
hide:   true          - label only visible to screen readers
class:  "custom"      - append custom CSS class

Example:

form.label :username, bootstrap: {label: {text: "Name", class: "important"}}
label_align_class[RW]

CSS class for label alignment in horizontal form. Default: “text-sm-right”

label_col_class[RW]

CSS class for label column when using horizontal form. Default: “col-sm-2”

layout[RW]

Controls form layout. Can be: “vertical” (default), “horizontal” or “inline”

prepend[RW]

Input groups allow prepending and appending arbitrary html. By default these are nil. Example usage:

form.text_field :dollars, bootstrap: {prepend: "$", append: ".00"}

For non-text values, use hash like so:

form.text_field :search, bootstrap: {append: {html: "<button>Go</button>".html_safe}}

Public Class Methods

new(options = {}) click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 78
def initialize(options = {})
  set_defaults
  set_options(options)
end

Public Instance Methods

horizontal?() click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 83
def horizontal?
  @layout.to_s == "horizontal"
end
inline?() click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 87
def inline?
  @layout.to_s == "inline"
end
label=(value) click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 116
def label=(value)
  @label = value.is_a?(Hash) ? value : { text: value }
end
offset_col_class() click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 91
def offset_col_class
  label_col_class.gsub(%r{col-(\w+)-(\d+)}, 'offset-\1-\2')
end
scoped(options = {}) click to toggle source

This will return a copy of BootstrapOptions object with new options set that don't affect original object. This way we can have options specific to a given form field. For example, we can change grid just for one field:

bootstrap_form_with scope: :login do |f|
  f.text_field :email, bootstrap: {label_col_class: "col-md-6", control_col_class: "col-md-6"}
  f.password_field :password
end
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 104
def scoped(options = {})
  scope = clone
  scope.set_options(options)
  scope
end
set_options(options = {}) click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 110
def set_options(options = {})
  options.is_a?(Hash) && options.each do |key, value|
    public_send("#{key}=", value)
  end
end

Private Instance Methods

set_defaults() click to toggle source
# File lib/comfy_bootstrap_form/bootstrap_options.rb, line 122
def set_defaults
  @disabled             = false
  @layout               = "vertical"
  @label_col_class      = "col-sm-2"
  @control_col_class    = "col-sm-10"
  @label_align_class    = "text-sm-right"
  @inline_margin_class  = "mr-sm-2"
  @label                = {}
  @append               = nil
  @prepend              = nil
  @help                 = nil
  @error                = nil
  @check_inline         = false
  @custom_control       = true
end