Sha256: 95691656825c659cd7c98b8c522f12f394609c306c5dc1046209f9e1de85233f

Contents?: true

Size: 988 Bytes

Versions: 2

Compression:

Stored size: 988 Bytes

Contents

module PhModel
  module Concerns
    module AttributeNestedValidation
      extend ActiveSupport::Concern

      included do |other|
        other.validate :validate_nested_attributes
      end

      def validate_nested_attributes
        self.class.attributes.each do |attribute_name, info|
          value = send(attribute_name)
          if info[:type].is_a? Array
            if value.respond_to? :each_with_index
              value.each_with_index do |item_value, index|
                check_one(item_value, "#{attribute_name}[#{index}]")
              end
            end
          else
            check_one(value, attribute_name)
          end
        end
      end

      def check_one(value, attribute_name)
        return if !value.respond_to?(:valid?) || !value.respond_to?(:errors) || value.errors.nil? || value.valid?
        value.errors.full_messages.each do |message|
          errors.add(:base, "#{attribute_name}.#{message}")
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ph_model-1.1.0 lib/ph_model/concerns/attribute_nested_validation.rb
ph_model-1.0.2 lib/ph_model/concerns/attribute_nested_validation.rb