示例#1
0
 /**
  * @return Shape
  */
 public function getKey()
 {
     if (!$this->key) {
         $this->key = isset($this->definition['key']) ? Shape::create($this->definition['key'], $this->shapeMap) : new Shape(['type' => 'string'], $this->shapeMap);
     }
     return $this->key;
 }
 /**
  * @return Shape
  *
  * @throws \RuntimeException if no member is specified
  */
 public function getMember()
 {
     if (!$this->member) {
         if (!isset($this->definition['member'])) {
             throw new \RuntimeException('No member attribute specified');
         }
         $this->member = Shape::create($this->definition['member'], $this->shapeMap);
     }
     return $this->member;
 }
示例#3
0
 /**
  * Resolve a shape reference
  *
  * @param array $shapeRef Shape reference shape
  *
  * @return Shape
  * @throws \InvalidArgumentException
  */
 public function resolve(array $shapeRef)
 {
     $shape = $shapeRef['shape'];
     if (!isset($this->definitions[$shape])) {
         throw new \InvalidArgumentException('Shape not found: ' . $shape);
     }
     $isSimple = count($shapeRef) == 1;
     if ($isSimple && isset($this->simple[$shape])) {
         return $this->simple[$shape];
     }
     $definition = $shapeRef + $this->definitions[$shape];
     $definition['name'] = $definition['shape'];
     unset($definition['shape']);
     $result = Shape::create($definition, $this);
     if ($isSimple) {
         $this->simple[$shape] = $result;
     }
     return $result;
 }
示例#4
0
 protected function shapeFor(array $definition)
 {
     return isset($definition['shape']) ? $this->shapeMap->resolve($definition) : Shape::create($definition, $this->shapeMap);
 }