class Shaf::Formable::Field

Constants

HTML_TYPE_MAPPINGS

Public Class Methods

new(name, params = {}) click to toggle source
# File lib/shaf/formable/field.rb, line 17
def initialize(name, params = {})
  @name = name
  @type = params[:type]&.to_sym
  @title = params[:title] || params[:label]
  @hidden = params.fetch(:hidden, false)
  @has_value = params.key? :value
  @value = params[:value]
  @required = params.fetch(:required, false)
  @accessor_name = params.fetch(:accessor_name, name).to_sym
end

Public Instance Methods

has_value?() click to toggle source
# File lib/shaf/formable/field.rb, line 28
def has_value?
  @has_value
end
to_html() click to toggle source
# File lib/shaf/formable/field.rb, line 37
def to_html
  [
    '<div class="form--input-group">',
    label_element,
    input_element,
    '</div>'
  ].compact.join("\n")
end
value=(v) click to toggle source
# File lib/shaf/formable/field.rb, line 32
def value=(v)
  @value = v
  @has_value = true
end

Private Instance Methods

input_element() click to toggle source
# File lib/shaf/formable/field.rb, line 53
def input_element
  _value = value ? %Q(value="#{value.to_s}") : nil
  _required = required ? "required" : nil
  _type = hidden ? "hidden" : HTML_TYPE_MAPPINGS.fetch(type.to_s, 'text')
  attributes = [
    %Q(type="#{_type}"),
    'class="form--input"',
    %Q(id="#{name.to_s}"),
    %Q(name="#{name.to_s}"),
  ]
  attributes << %Q(value="#{value.to_s}") if value
  attributes << "required" if required

  "<input #{attributes.join(" ")}>"
end
label_element() click to toggle source
# File lib/shaf/formable/field.rb, line 48
def label_element
  str = (title || name || "").to_s
  %Q(<label for="#{name}" class="form--label">#{str}</label>)
end