module Shaf::Formable
Public Class Methods
add_class_reader(clazz, name, form)
click to toggle source
# File lib/shaf/formable.rb, line 5 def self.add_class_reader(clazz, name, form) clazz.define_singleton_method(name) { form } end
add_instance_reader(clazz, name, form, prefill)
click to toggle source
# File lib/shaf/formable.rb, line 9 def self.add_instance_reader(clazz, name, form, prefill) clazz.define_method(name) do form.tap do |f| f.resource = self f.fill! if prefill end end end
Public Instance Methods
form(&block)
click to toggle source
Deprecated legacy way of specifying forms inside models
# File lib/shaf/formable.rb, line 19 def form(&block) forms_for(self, &block) Shaf.log.info <<~MSG DEPRECATED method ::form in #{self} Declare forms in a separate class extending Shaf::Formable with the class method forms_for! MSG end
forms_for(clazz, &block)
click to toggle source
New way of writing forms in a separate class/file
# File lib/shaf/formable.rb, line 31 def forms_for(clazz, &block) builder = Formable::Builder.new(&block) builder.forms.each do |form| next unless form.action method_name = "#{form.action}_form" Formable.add_class_reader(clazz, method_name, form.dup) if instance_accessor = builder.instance_accessor_for(form) prefill_form = instance_accessor.prefill? Formable.add_instance_reader(clazz, method_name, form.dup, prefill_form) end end end
Also aliased as: form_for