Sha256: fe45732d74abe25616b9cf5cf4df3f6ba44c5637abe0b211e76154b76abc833c
Contents?: true
Size: 1.11 KB
Versions: 2
Compression:
Stored size: 1.11 KB
Contents
# frozen_string_literal: true require 'active_support/concern' module ActForm module Combinable # rubocop:disable Style/Documentation extend ActiveSupport::Concern included do class_attribute :_forms, instance_writer: false self._forms = [] end def valid?(context = nil) super combined_forms_valid?(context) errors.empty? end def combined_forms_valid?(context) return if _forms.empty? _forms.each do |form_class| form = form_class.new(attributes) form.valid?(context) form.errors.details.each do |attr_name, arr| arr.each do |error| next if error[:error] == :required errors.add(attr_name, error[:error]) end end end end class_methods do def combine(*forms) forms.each do |form_class| raise ArgumentError, "can't combine itself" if form_class == self next if self._forms.include?(form_class) self.merge_attribute_set_from(form_class) self._forms << form_class end end # End of combine end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
act_form-0.4.4 | lib/act_form/combinable.rb |
act_form-0.4.3 | lib/act_form/combinable.rb |