%PDF- %PDF-
Direktori : /var/www/projetos/suporte.iigd.com.br/vendor/swaggest/json-schema/src/Path/ |
Current File : /var/www/projetos/suporte.iigd.com.br/vendor/swaggest/json-schema/src/Path/PointerUtil.php |
<?php namespace Swaggest\JsonSchema\Path; use Swaggest\JsonDiff\JsonPointer; use Swaggest\JsonSchema\Schema; class PointerUtil { /** * Builds JSON pointer to schema from processing path * Path example: #->properties:responses->additionalProperties:envvar->properties:schema * @param string $path * @param bool $isURIFragmentId * @return string|null */ public static function getSchemaPointer($path, $isURIFragmentId = false) { $result = self::getSchemaPointers($path, $isURIFragmentId); return array_pop($result); } /** * Builds JSON pointer to schema from processing path * Path example: #->properties:responses->additionalProperties:envvar->properties:schema * @param string $path * @param bool $isURIFragmentId * @return string[] */ public static function getSchemaPointers($path, $isURIFragmentId = false) { $items = explode('->', $path); unset($items[0]); $result = array(); $pointer = $isURIFragmentId ? '#' : ''; foreach ($items as $item) { $parts = explode(':', $item); if (isset($parts[0])) { $schemaPaths = explode('[', $parts[0], 2); if (isset($schemaPaths[1])) { $schemaPaths[1] = substr(strtr($schemaPaths[1], array('~1' => '~', '~2' => ':')), 0, -1); } if ($schemaPaths[0] === Schema::PROP_REF) { $result[] = $pointer . '/' . JsonPointer::escapeSegment(Schema::PROP_REF, $isURIFragmentId); if ($schemaPaths[1][0] !== '#') { // Absolute URI. $pointer = $schemaPaths[1]; } else { $pointer = self::rebuildPointer($schemaPaths[1], $isURIFragmentId); } continue; } $pointer .= '/' . JsonPointer::escapeSegment($schemaPaths[0], $isURIFragmentId); if (isset($schemaPaths[1])) { $pointer .= '/' . JsonPointer::escapeSegment($schemaPaths[1], $isURIFragmentId); } elseif (isset($parts[1])) { $pointer .= '/' . JsonPointer::escapeSegment($parts[1], $isURIFragmentId); } } } if ($pointer === '') { $pointer = '/'; } $result[] = $pointer; return $result; } /** * Builds JSON pointer to data from processing path * Path example: #->properties:responses->additionalProperties:envvar->properties:schema * @param string $path * @param bool $isURIFragmentId * @return string */ public static function getDataPointer($path, $isURIFragmentId = false) { $items = explode('->', $path); unset($items[0]); $result = $isURIFragmentId ? '#' : ''; foreach ($items as $item) { $parts = explode(':', $item); if (isset($parts[1])) { $result .= '/' . JsonPointer::escapeSegment($parts[1], $isURIFragmentId); } } if ($result === '') { return '/'; } return $result; } private static function rebuildPointer($pointer, $isURIFragmentId = false) { $parts = JsonPointer::splitPath($pointer); $result = $isURIFragmentId ? '#' : ''; foreach ($parts as $item) { $result .= '/' . JsonPointer::escapeSegment($item, $isURIFragmentId); } return $result; } }