Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. JsonPointer.php

class JsonPointer

@package JsonSchema\Entity

@author Joost Nijhuis <jnijhuis81@gmail.com>

Hierarchy

  • class \JsonSchema\Entity\JsonPointer

Expanded class hierarchy of JsonPointer

13 files declare their use of JsonPointer
BaseConstraint.php in vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php
CollectionConstraint.php in vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php
Constraint.php in vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php
ConstraintInterface.php in vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php
EnumConstraint.php in vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php

... See full list

File

vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php, line 19

Namespace

JsonSchema\Entity
View source
class JsonPointer {
    
    /** @var string */
    private $filename;
    
    /** @var string[] */
    private $propertyPaths = array();
    
    /**
     * @var bool Whether the value at this path was set from a schema default
     */
    private $fromDefault = false;
    
    /**
     * @param string $value
     *
     * @throws InvalidArgumentException when $value is not a string
     */
    public function __construct($value) {
        if (!is_string($value)) {
            throw new InvalidArgumentException('Ref value must be a string');
        }
        $splitRef = explode('#', $value, 2);
        $this->filename = $splitRef[0];
        if (array_key_exists(1, $splitRef)) {
            $this->propertyPaths = $this->decodePropertyPaths($splitRef[1]);
        }
    }
    
    /**
     * @param string $propertyPathString
     *
     * @return string[]
     */
    private function decodePropertyPaths($propertyPathString) {
        $paths = array();
        foreach (explode('/', trim($propertyPathString, '/')) as $path) {
            $path = $this->decodePath($path);
            if (is_string($path) && '' !== $path) {
                $paths[] = $path;
            }
        }
        return $paths;
    }
    
    /**
     * @return array
     */
    private function encodePropertyPaths() {
        return array_map(array(
            $this,
            'encodePath',
        ), $this->getPropertyPaths());
    }
    
    /**
     * @param string $path
     *
     * @return string
     */
    private function decodePath($path) {
        return strtr($path, array(
            '~1' => '/',
            '~0' => '~',
            '%25' => '%',
        ));
    }
    
    /**
     * @param string $path
     *
     * @return string
     */
    private function encodePath($path) {
        return strtr($path, array(
            '/' => '~1',
            '~' => '~0',
            '%' => '%25',
        ));
    }
    
    /**
     * @return string
     */
    public function getFilename() {
        return $this->filename;
    }
    
    /**
     * @return string[]
     */
    public function getPropertyPaths() {
        return $this->propertyPaths;
    }
    
    /**
     * @param array $propertyPaths
     *
     * @return JsonPointer
     */
    public function withPropertyPaths(array $propertyPaths) {
        $new = clone $this;
        $new->propertyPaths = $propertyPaths;
        return $new;
    }
    
    /**
     * @return string
     */
    public function getPropertyPathAsString() {
        return rtrim('#/' . implode('/', $this->encodePropertyPaths()), '/');
    }
    
    /**
     * @return string
     */
    public function __toString() {
        return $this->getFilename() . $this->getPropertyPathAsString();
    }
    
    /**
     * Mark the value at this path as being set from a schema default
     */
    public function setFromDefault() {
        $this->fromDefault = true;
    }
    
    /**
     * Check whether the value at this path was set from a schema default
     *
     * @return bool
     */
    public function fromDefault() {
        return $this->fromDefault;
    }

}

Members

Title Sort descending Modifiers Object type Summary
JsonPointer::$filename private property @var string
JsonPointer::$fromDefault private property
JsonPointer::$propertyPaths private property @var string[]
JsonPointer::decodePath private function
JsonPointer::decodePropertyPaths private function
JsonPointer::encodePath private function
JsonPointer::encodePropertyPaths private function
JsonPointer::fromDefault public function Check whether the value at this path was set from a schema default
JsonPointer::getFilename public function
JsonPointer::getPropertyPathAsString public function
JsonPointer::getPropertyPaths public function
JsonPointer::setFromDefault public function Mark the value at this path as being set from a schema default
JsonPointer::withPropertyPaths public function
JsonPointer::__construct public function
JsonPointer::__toString public function

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal