Module: Lutaml::Model::Validation
- Included in:
- Serialize
- Defined in:
- lib/lutaml/model/validation.rb
Instance Method Summary collapse
-
#format_element_sequences(_register) ⇒ Array?
Hook for getting format-specific element sequences for validation.
- #order_names ⇒ Object
- #validate(register: Lutaml::Model::Config.default_register) ⇒ Object
- #validate!(register: Lutaml::Model::Config.default_register) ⇒ Object
- #validate_helper(errors, register) ⇒ Object
- #validate_sequence!(errors, names, register) ⇒ Object
Instance Method Details
#format_element_sequences(_register) ⇒ Array?
Hook for getting format-specific element sequences for validation. XML overrides via InstanceMethods prepend.
72 73 74 |
# File 'lib/lutaml/model/validation.rb', line 72 def format_element_sequences(_register) nil end |
#order_names ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File 'lib/lutaml/model/validation.rb', line 76 def order_names return [] unless respond_to?(:element_order) && element_order element_order.each_with_object([]) do |element, arr| next if element.text? arr << element.name end end |
#validate(register: Lutaml::Model::Config.default_register) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/lutaml/model/validation.rb', line 6 def validate(register: Lutaml::Model::Config.default_register) errors = [] self.class.attributes(register).each do |name, attr| value = public_send(:"#{name}") begin if value.respond_to?(:validate) errors.concat(value.validate) else resolver = Lutaml::Model::Services::DefaultValueResolver.new( attr, register, self ) attr.validate_value!(value, register, resolver) end rescue Lutaml::Model::CollectionCountOutOfRangeError => e errors << e unless attr.choice rescue Lutaml::Model::InvalidValueError, Lutaml::Model::CollectionTrueMissingError, Lutaml::Model::PolymorphicError, Lutaml::Model::ValidationFailedError, Lutaml::Model::RequiredAttributeMissingError, Lutaml::Model::PatternNotMatchedError => e errors << e end end validate_helper(errors, register) end |
#validate!(register: Lutaml::Model::Config.default_register) ⇒ Object
36 37 38 39 |
# File 'lib/lutaml/model/validation.rb', line 36 def validate!(register: Lutaml::Model::Config.default_register) errors = validate(register: register) raise Lutaml::Model::ValidationError.new(errors) if errors.any? end |
#validate_helper(errors, register) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/lutaml/model/validation.rb', line 41 def validate_helper(errors, register) self.class.choice_attributes.each do |attribute| attribute.validate_content!(self, register) end validate_sequence!(errors, order_names, register) errors rescue Lutaml::Model::ChoiceUpperBoundError, Lutaml::Model::ChoiceLowerBoundError => e errors << e end |
#validate_sequence!(errors, names, register) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/lutaml/model/validation.rb', line 53 def validate_sequence!(errors, names, register) sequences = format_element_sequences(register) return errors if names.empty? || sequences.nil? sequences.each do |sequence| sequence.validate_content!(names, self, register) end errors rescue Lutaml::Model::IncorrectSequenceError, Lutaml::Model::ChoiceUpperBoundError, Lutaml::Model::ChoiceLowerBoundError => e errors << e end |