class Formular::Builder

Attributes

elements[R]

Public Class Methods

define_element_method(element_name, element_class) click to toggle source
# File lib/formular/builder.rb, line 19
def self.define_element_method(element_name, element_class)
  define_method(element_name) do |*args, &block|
    if args.size > 1
      name, options = args
    else
      case args.first
      when Symbol then name = args.first
      when Hash then options = args.first
      end
    end

    options ||= {}
    options[:builder] = self
    options[:attribute_name] = name if name

    element_class.(options, &block)
  end
end
define_element_methods(**elements) click to toggle source
# File lib/formular/builder.rb, line 15
def self.define_element_methods(**elements)
  elements.each { |k, v| define_element_method(k, v) }
end
element_set(**elements) click to toggle source
# File lib/formular/builder.rb, line 10
def self.element_set(**elements)
  self.elements.merge!(elements)
  define_element_methods(self.elements)
end
new(**elements) click to toggle source
# File lib/formular/builder.rb, line 38
def initialize(**elements)
  @elements = self.class.elements.merge(elements)
  self.class.define_element_methods(elements) if elements
end

Public Instance Methods

call(&block) click to toggle source
# File lib/formular/builder.rb, line 48
def call(&block)
  capture(self, &block)
end
capture(*args) { |*args| ... } click to toggle source
# File lib/formular/builder.rb, line 44
def capture(*args)
  yield(*args)
end