Sha256: b1bf4dd30a98c3442c0b24c1da0560a6877e473c496eb68727d0df7940c7c6db
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
require 'active_support/concern' require 'act_form/utils' module ActForm module Combinable extend ActiveSupport::Concern included do class_attribute :_forms, instance_writer: false self._forms = [] end class_methods do def combine(*forms) forms.each do |form_class| raise ArgumentError, 'Can not combine itself' if form_class == self next if self._forms.include?(form_class) self._forms << form_class self.attribute_set.merge(form_class.attribute_set) Utils.merge(self._validators, form_class._validators) method_name = form_class.model_name.singular define_method(method_name) { form_class.new(attributes) } form_class._validate_callbacks.each do |callback| filter = callback.filter if filter.is_a?(Symbol) || filter.is_a?(String) class_eval <<-RUBY, __FILE__, __LINE__ + 1 def #{filter} form = #{method_name} form.send(:#{filter}) form.errors.messages.each do |attr, _errors| _errors.each { |err| errors.add(attr, err) } end end private :#{filter} RUBY end end self._validate_callbacks.append *form_class._validate_callbacks end # forms.each end # combine end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
act_form-0.1.0 | lib/act_form/combinable.rb |