class Formwandler::Field

Attributes

field_definition[R]
form[R]

Public Class Methods

new(form:, field_definition:) click to toggle source
# File lib/formwandler/field.rb, line 9
def initialize(form:, field_definition:)
  @form = form
  @field_definition = field_definition
end

Public Instance Methods

array?() click to toggle source
# File lib/formwandler/field.rb, line 63
def array?
  field_definition.array
end
default() click to toggle source
# File lib/formwandler/field.rb, line 55
def default
  _evaluate_field_definition_value(:default)
end
default?() click to toggle source
# File lib/formwandler/field.rb, line 51
def default?
  !field_definition.default.nil?
end
delocalize() click to toggle source
# File lib/formwandler/field.rb, line 59
def delocalize
  _evaluate_field_definition_value(:delocalize)
end
disabled?() click to toggle source
# File lib/formwandler/field.rb, line 39
def disabled?
  _evaluate_field_definition_value(:disabled)
end
hidden?() click to toggle source
# File lib/formwandler/field.rb, line 31
def hidden?
  _evaluate_field_definition_value(:hidden)
end
options() click to toggle source
# File lib/formwandler/field.rb, line 47
def options
  all_options - hidden_options
end
raw_value() click to toggle source
# File lib/formwandler/field.rb, line 27
def raw_value
  model_instance ? model_instance.public_send(source) : @value
end
readonly?() click to toggle source
# File lib/formwandler/field.rb, line 43
def readonly?
  _evaluate_field_definition_value(:readonly)
end
value() click to toggle source
# File lib/formwandler/field.rb, line 23
def value
  transform_value(raw_value, field_definition.out_transformation)
end
value=(new_value) click to toggle source
# File lib/formwandler/field.rb, line 14
def value=(new_value)
  new_value = transform_value(new_value, field_definition.in_transformation)
  if model_instance
    model_instance.public_send("#{source}=", new_value)
  else
    @value = new_value
  end
end
visible?() click to toggle source
# File lib/formwandler/field.rb, line 35
def visible?
  !hidden?
end

Private Instance Methods

_evaluate_field_definition_value(attr_name) click to toggle source
# File lib/formwandler/field.rb, line 102
def _evaluate_field_definition_value(attr_name)
  value = field_definition.send(attr_name)
  _evaluate_value(value)
end
_evaluate_value(value) click to toggle source
# File lib/formwandler/field.rb, line 107
def _evaluate_value(value)
  if value.respond_to?(:call)
    form.instance_exec(&value)
  else
    value
  end
end
all_options() click to toggle source
# File lib/formwandler/field.rb, line 78
def all_options
  _evaluate_field_definition_value(:options) || options_from_model || []
end
enum_field?() click to toggle source
# File lib/formwandler/field.rb, line 94
def enum_field?
  model_instance.class.attribute_types[name.to_s].is_a?(ActiveRecord::Enum::EnumType)
end
hidden_options() click to toggle source
# File lib/formwandler/field.rb, line 82
def hidden_options
  field_definition.hidden_options&.select do |_option, value|
    _evaluate_value(value)
  end&.keys || []
end
model_instance() click to toggle source
# File lib/formwandler/field.rb, line 98
def model_instance
  form.models[field_definition.model] if field_definition.model.present?
end
options_from_model() click to toggle source
# File lib/formwandler/field.rb, line 88
def options_from_model
  return unless model_instance.present? && model_instance.is_a?(ActiveRecord::Base)
  return unless enum_field?
  model_instance.class.public_send(name.to_s.pluralize).keys
end
transform_value(value, transformation) click to toggle source
# File lib/formwandler/field.rb, line 69
def transform_value(value, transformation)
  return value if !field_definition.transform_blank && (value.nil? || value == '')
  if transformation.respond_to?(:call)
    form.instance_exec(value, &transformation)
  else
    value
  end
end