Module: Micro::Attributes::Composition::Instance

Defined in:
lib/micro/attributes/composition.rb

Instance Method Summary collapse

Instance Method Details

#__validate_nested_entities__Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/micro/attributes/composition.rb', line 77

def __validate_nested_entities__
  return unless respond_to?(:errors)

  # Iterate only PUBLIC attributes so private/protected nested
  # entity names never leak through ActiveModel `errors` /
  # `full_messages`. Mirrors the bubble's visibility gate above.
  self.class.attributes_by_visibility[:public].each do |attr_name|
    child = instance_variable_get("@#{attr_name}")

    next unless child.is_a?(::Object) && child.class.include?(::Micro::Attributes)

    child_invalid =
      if child.respond_to?(:valid?)
        # If the child already has errors, treat it as invalid
        # without re-running `valid?` — AM's `valid?` calls
        # `errors.clear` first, which would wipe any errors the
        # caller (or another validator pass) had added to a
        # shared child instance.
        child.errors.any? || !child.valid?
      elsif child.respond_to?(:attributes_errors?)
        child.attributes_errors?
      else
        false
      end

    errors.add(attr_name.to_sym, 'is invalid') if child_invalid
  end
end