class Arbre::Form::Component
Attributes
index[R]
path[R]
record[R]
Public Instance Methods
association( association, association_wrapper: @wrappers.association, record_wrapper: @wrappers.record, association_attributes: {}, **record_attributes, &block )
click to toggle source
# File lib/arbre/form/component.rb, line 109 def association( association, association_wrapper: @wrappers.association, record_wrapper: @wrappers.record, association_attributes: {}, **record_attributes, &block ) association_attributes[:id] ||= @path.id(association) association_attributes[:group_name] = association wrapper = insert_tag(association_wrapper, association_attributes) loaded_association = record.public_send(association) has_many = loaded_association.is_a?(Array) collection = Array(loaded_association) association_class = @path.id(association) wrapped_block = proc { instance_exec(&block) } within wrapper do collection.each_with_index do |record, index| with_record(record, association, has_many ? index : nil) do |id| current_attributes = record_attributes.dup current_attributes[:id] ||= id tag = insert_tag(record_wrapper, current_attributes, &wrapped_block) tag.add_class(association_class) end end end @index = 0 wrapper end
build( record, action = '/', errors: record.respond_to?(:errors) ? record.errors : {}, successes: record.respond_to?(:successes) ? record.successes : {}, wrappers: Arbre::Form.config.wrappers, classes: Arbre::Form.config.classes, components: Arbre::Form.config.components, **attributes )
click to toggle source
Calls superclass method
Arbre::Form::Base#build
# File lib/arbre/form/component.rb, line 12 def build( record, action = '/', errors: record.respond_to?(:errors) ? record.errors : {}, successes: record.respond_to?(:successes) ? record.successes : {}, wrappers: Arbre::Form.config.wrappers, classes: Arbre::Form.config.classes, components: Arbre::Form.config.components, **attributes ) @record = record class_name = dom_class_name_for(record) @path = Path.new(successes: successes, errors: errors) { push(record, class_name) } @wrappers = wrappers @classes = classes @components = components attributes[:action] = action super attributes end
field( attribute, content = nil, components: @components, as: :input, value: nil, label: nil, wrapper: {}, field_wrapper: @wrappers.field, error_wrapper: @wrappers.error, error_class: @classes.error, errors_class: @classes.errors, success_wrapper: @wrappers.success, success_class: @classes.success, successes_class: @classes.successes, **field_attributes, &block )
click to toggle source
# File lib/arbre/form/component.rb, line 36 def field( attribute, content = nil, components: @components, as: :input, value: nil, label: nil, wrapper: {}, field_wrapper: @wrappers.field, error_wrapper: @wrappers.error, error_class: @classes.error, errors_class: @classes.errors, success_wrapper: @wrappers.success, success_class: @classes.success, successes_class: @classes.successes, **field_attributes, &block ) field_errors = @path.errors.fetch(attribute, []) field_successes = @path.successes.fetch(attribute, []) config = components[as] field_attributes[:type] ||= config.type formatter = config.formatter value ||= @record.respond_to?(attribute) ? @record.public_send(attribute) : nil value = formatter.call(value) wrapped = proc do if label node = label(label) node.set_attribute(:for, self.id) end field = insert_tag( config.tag, content, id: @path.id(attribute), name: @path.name(attribute), value: value, **field_attributes, &block ) unless field_errors.empty? field.add_class error_class errors = insert_tag(error_wrapper, field_errors, class_name: errors_class) field.define_singleton_method(:errors) { errors } end unless field_successes.empty? field.add_class success_class successes = insert_tag(success_wrapper, field_successes, class_name: successes_class) field.define_singleton_method(:successes) { successes } end field end insert_tag(field_wrapper, wrapper, &wrapped) end
field_group(group_name = nil, group_wrapper: @wrappers.group, **attributes, &block)
click to toggle source
# File lib/arbre/form/component.rb, line 102 def field_group(group_name = nil, group_wrapper: @wrappers.group, **attributes, &block) wrapper = proc { instance_exec(&block) } attributes[:id] ||= @path.id(group_name) if group_name attributes[:group_name] = group_name insert_tag(group_wrapper, attributes, &wrapper) end
tag_name()
click to toggle source
# File lib/arbre/form/component.rb, line 143 def tag_name 'form' end
Private Instance Methods
with_record(record, association, index) { |id| ... }
click to toggle source
# File lib/arbre/form/component.rb, line 149 def with_record(record, association, index) @index = index old_record, @record = @record, record @path.push(record, association, index) yield(@path.id) @path.pop @record = old_record end