Open dpatti opened 8 years ago
So what you're saying is that if we validate against a fragment, we should use the version from the base schema. That makes sense. However, I think your test is invalid - I think odd-a
should have type: "object"
?
I don't know if type: "object"
is specifically necessary, and the other tests in the file do not have it. I am happy to add it if you think it is important. As it stands now, the test should fall without the patch and passes with it.
I'll take a deeper look at this shortly. I think the essence of what you're doing is right.
This refactors some of
Validator
to fix an issue with validating a fragment of an extended schema against a json object. The problem is that while navigating through the schema, we are using the configured:version
option as the validator for each partial schema. This is an issue because if the root of the schema declares a$schema
, that information is lost in the traversal.The refactor does two things. Firstly, it does not write back into
@options[:version]
and it stops using it outside of the constructor entirely. The only place that should know about this is the initialized schema, and from that point on, the canonical validator should be the schema object's validator since it makes a decision about which to use in its constructor. So we can reduce complexity by using that validator in the:validate_schema
option branch.The other place that used
:version
is theschema_from_fragment
method, which is where the bug exists. What we're doing here, instead of dealing with schemas and hashes during the iterator, is pulling the schema object out, digging through it using the fragments, and then wrapping the result in a schema using thebase_schema
's validator.Tests have been included that demonstrate the problem.