Class: Klods::FormBuilder

Inherits:
ActionView::Helpers::FormBuilder
  • Object
show all
Defined in:
lib/klods/form_builder.rb

Instance Method Summary collapse

Instance Method Details

#klods_field(method, label: nil, type: :text, help: nil, required: false, **options) ⇒ Object

Renders a fully wired klods input field: wrapper div, label, input, and optional help/error text. For textarea use f.klods_textarea; for select use f.klods_select.

f.klods_field :email, label: "Email", type: :email, autocomplete: "email"

f.klods_field :password, label: "Password", type: :password, required: true

f.klods_field :name, label: "Name", help: "Your display name"



9
10
11
12
13
# File 'lib/klods/form_builder.rb', line 9

def klods_field(method, label: nil, type: :text, help: nil, required: false, **options)
  render_klods_wrapper(method, label: label, help: help, required: required) do |aria|
    send(input_helper_for(type), method, class: "klods-input", **aria, **options)
  end
end

#klods_select(method, choices = [], label: nil, help: nil, required: false, **options) ⇒ Object

Renders a klods select field with wrapper, label, and error/help wiring. choices is an array of ["Label", value] pairs (or plain values).

f.klods_select :role, [["Admin", "admin"], ["User", "user"]], label: "Role"



28
29
30
31
32
33
# File 'lib/klods/form_builder.rb', line 28

def klods_select(method, choices = [], label: nil, help: nil, required: false, **options)
  render_klods_wrapper(method, label: label, help: help, required: required) do |aria|
    select_el = render_select_input(method, choices, class: "klods-select", **aria, **options)
    @template.(:div, select_el, class: "klods-select-wrapper")
  end
end

#klods_submit(label = nil, **options) ⇒ Object

Renders a submit button styled as a primary klods button.

f.klods_submit "Save"

f.klods_submit "Sign up", class: "klods-button--wide" # extra class merged in



39
40
41
42
43
# File 'lib/klods/form_builder.rb', line 39

def klods_submit(label = nil, **options)
  extra = options.delete(:class)
  options[:class] = ["klods-button", "klods-button--primary", extra].compact.join(" ")
  submit(label, **options)
end

#klods_textarea(method, label: nil, help: nil, required: false, **options) ⇒ Object

Renders a klods textarea field with wrapper, label, and error/help wiring.

f.klods_textarea :bio, label: "Bio", help: "Tell us about yourself"



18
19
20
21
22
# File 'lib/klods/form_builder.rb', line 18

def klods_textarea(method, label: nil, help: nil, required: false, **options)
  render_klods_wrapper(method, label: label, help: help, required: required) do |aria|
    render_textarea_input(method, class: "klods-textarea", **aria, **options)
  end
end