lib/jsi/validation/result.rb in jsi-0.7.0 vs lib/jsi/validation/result.rb in jsi-0.8.0

- old
+ new

@@ -1,14 +1,11 @@ # frozen_string_literal: true module JSI module Validation # a result of validating an instance against schemas which describe it. - # virtual base class. class Result - include Util::Virtual - Builder = Util::AttrStruct[*%w( result schema instance_ptr instance_document @@ -22,11 +19,10 @@ def instance instance_ptr.evaluate(instance_document) end def schema_issue(*_) - virtual_method end def schema_error(message, keyword = nil) schema_issue(:error, message, keyword) end @@ -46,16 +42,16 @@ ) merge_schema_issues(subresult) subresult end + # @param instance_child_token [String, Integer] # @param subschema_ptr [JSI::Ptr, #to_ary] - # @param subinstance_ptr [JSI::Ptr, #to_ary] # @return [JSI::Validation::Result] - def child_subschema_validate(subschema_ptr, subinstance_ptr) + def child_subschema_validate(instance_child_token, subschema_ptr) subresult = schema.subschema(subschema_ptr).internal_validate_instance( - instance_ptr + subinstance_ptr, + instance_ptr[instance_child_token], instance_document, validate_only: validate_only, ) merge_schema_issues(subresult) subresult @@ -69,28 +65,17 @@ result.schema_issues.merge(other_result.schema_issues) end nil end end + end - def builder(schema, instance_ptr, instance_document, validate_only, visited_refs) - self.class::Builder.new( - result: self, - schema: schema, - instance_ptr: instance_ptr, - instance_document: instance_document, - validate_only: validate_only, - visited_refs: visited_refs, - ) - end - + class Result # is the instance valid against its schemas? # @return [Boolean] def valid? - # :nocov: - virtual_method - # :nocov: + #chkbug raise(NotImplementedError) end include Util::FingerprintHash end @@ -100,11 +85,11 @@ class Builder < Result::Builder def validate( valid, message, keyword: nil, - results: [] + results: Util::EMPTY_ARY ) results.each { |res| result.schema_issues.merge(res.schema_issues) } if !valid results.each { |res| result.validation_errors.merge(res.validation_errors) } result.validation_errors << Validation::Error.new({ @@ -124,11 +109,13 @@ keyword: keyword, schema: schema, }) end end + end + class FullResult def initialize @validation_errors = Set.new @schema_issues = Set.new end @@ -138,11 +125,10 @@ def valid? validation_errors.empty? end def freeze - @validation_errors.each(&:freeze) @schema_issues.each(&:freeze) @validation_errors.freeze @schema_issues.freeze super end @@ -154,21 +140,18 @@ validation_errors.merge(result.validation_errors) schema_issues.merge(result.schema_issues) self end - def +(result) - FullResult.new.merge(self).merge(result) - end - - # @private + # see {Util::Private::FingerprintHash} + # @api private def jsi_fingerprint { class: self.class, validation_errors: validation_errors, schema_issues: schema_issues, - } + }.freeze end end # a result indicating only whether an instance is valid against its schemas class ValidityResult < Result @@ -176,35 +159,38 @@ class Builder < Result::Builder def validate( valid, message, keyword: nil, - results: [] + results: Util::EMPTY_ARY ) if !valid throw(:jsi_validation_result, INVALID) end end def schema_issue(*_) # noop end end + end + class ValidityResult def initialize(valid) @valid = valid end def valid? @valid end - # @private + # see {Util::Private::FingerprintHash} + # @api private def jsi_fingerprint { class: self.class, valid: valid?, - } + }.freeze end end end end