From 08a4f25812575447bf11e5df6cb3be5a3dc372b6 Mon Sep 17 00:00:00 2001 From: Tim Colbert Date: Mon, 27 Jul 2015 10:27:03 +1000 Subject: [PATCH 1/2] Change to allow MaxDepth to be set on construct of the RefResolver if required for complex schemas --- README.md | 3 ++- src/JsonSchema/RefResolver.php | 6 ++++-- tests/JsonSchema/Tests/RefResolverTest.php | 4 +--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3f9c58c3..a11193b9 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,8 @@ $schema = $retriever->retrieve('file://' . realpath('schema.json')); $data = json_decode(file_get_contents('data.json')); // If you use $ref or if you are unsure, resolve those references here -// This modifies the $schema object +// This modifies the $schema object, if the schema has a max depth greater than 7 +// you can pass as an additional value in the RefResolver $refResolver = new JsonSchema\RefResolver($retriever); $refResolver->resolve($schema, 'file://' . __DIR__); diff --git a/src/JsonSchema/RefResolver.php b/src/JsonSchema/RefResolver.php index cd96beb7..2af2f2d3 100644 --- a/src/JsonSchema/RefResolver.php +++ b/src/JsonSchema/RefResolver.php @@ -34,7 +34,7 @@ class RefResolver * maximum references depth * @var integer */ - public static $maxDepth = 7; + public static $maxDepth; /** * @var UriRetrieverInterface @@ -43,10 +43,12 @@ class RefResolver /** * @param UriRetriever $retriever + * @param int $maxDepth */ - public function __construct($retriever = null) + public function __construct($retriever = null, $maxDepth = 7) { $this->uriRetriever = $retriever; + self::$maxDepth = $maxDepth; } /** diff --git a/tests/JsonSchema/Tests/RefResolverTest.php b/tests/JsonSchema/Tests/RefResolverTest.php index 45ba7150..b0351961 100644 --- a/tests/JsonSchema/Tests/RefResolverTest.php +++ b/tests/JsonSchema/Tests/RefResolverTest.php @@ -349,9 +349,7 @@ public function testMaxDepthExceeded() $retriever = $this->getMock('JsonSchema\Uri\UriRetriever', array('retrieve')); $retriever->expects($this->any())->method('retrieve')->will($this->returnValue($jsonSchema)); - // stub resolver - \JsonSchema\RefResolver::$maxDepth = 0; - $resolver = new \JsonSchema\RefResolver($retriever); + $resolver = new \JsonSchema\RefResolver($retriever, 0); $resolver->resolve($jsonSchema); } From 65d4ace16197a7771b46d8f3f8f20ec5578593ad Mon Sep 17 00:00:00 2001 From: Tim Colbert Date: Mon, 27 Jul 2015 10:34:42 +1000 Subject: [PATCH 2/2] Update to ensure no BC break --- src/JsonSchema/RefResolver.php | 5 ++++- tests/JsonSchema/Tests/RefResolverTest.php | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/JsonSchema/RefResolver.php b/src/JsonSchema/RefResolver.php index 2af2f2d3..7de999e8 100644 --- a/src/JsonSchema/RefResolver.php +++ b/src/JsonSchema/RefResolver.php @@ -48,7 +48,10 @@ class RefResolver public function __construct($retriever = null, $maxDepth = 7) { $this->uriRetriever = $retriever; - self::$maxDepth = $maxDepth; + + if (null === self::$maxDepth) { + self::$maxDepth = $maxDepth; + } } /** diff --git a/tests/JsonSchema/Tests/RefResolverTest.php b/tests/JsonSchema/Tests/RefResolverTest.php index b0351961..45ba7150 100644 --- a/tests/JsonSchema/Tests/RefResolverTest.php +++ b/tests/JsonSchema/Tests/RefResolverTest.php @@ -349,7 +349,9 @@ public function testMaxDepthExceeded() $retriever = $this->getMock('JsonSchema\Uri\UriRetriever', array('retrieve')); $retriever->expects($this->any())->method('retrieve')->will($this->returnValue($jsonSchema)); - $resolver = new \JsonSchema\RefResolver($retriever, 0); + // stub resolver + \JsonSchema\RefResolver::$maxDepth = 0; + $resolver = new \JsonSchema\RefResolver($retriever); $resolver->resolve($jsonSchema); }