Example #1
0
File: Vale.php Project: cocur/vale
 /**
  * @param mixed            $data
  * @param array|string|int $keys
  *
  * @return mixed
  */
 public function removeValue($data, $keys)
 {
     if ($this->isKeysEmpty($keys)) {
         return;
     }
     if (!is_array($keys)) {
         $keys = [$keys];
     }
     $accessor = new Accessor($data);
     $keyCount = count($keys);
     $depth = 0;
     foreach ($keys as $key) {
         if ($depth + 1 === $keyCount) {
             if ($accessor->remove($key) === false) {
                 throw new InvalidArgumentException(sprintf('Did not remove path %s in structure %s', json_encode($keys), json_encode($data)));
             }
         } elseif ($accessor->to($key) === false) {
             throw new InvalidArgumentException(sprintf('Did not find path %s in structure %s', json_encode($keys), json_encode($data)));
         }
         ++$depth;
     }
     return $accessor->getData();
 }
Example #2
0
 /**
  * @test
  * @covers Cocur\Vale\Accessor::set()
  */
 public function setSetsValueInNestedObjectUsingSetter()
 {
     eval('class AccessorTestMockSetsValueInNestedObjectUsingSetter2 { protected $v; public function setLevel2($v) { $this->v = $v; } public function getLevel2() { return $this->v; } }');
     eval('class AccessorTestMockSetsValueInNestedObjectUsingSetter { function __construct() { $this->i = new AccessorTestMockSetsValueInNestedObjectUsingSetter2(); } public function level1() { return $this->i; } }');
     $obj = new \AccessorTestMockSetsValueInNestedObjectUsingSetter();
     $accessor = new Accessor($obj);
     $this->assertTrue($accessor->to('level1'));
     $this->assertTrue($accessor->set('level2', 'foo'));
     $this->assertSame('foo', $accessor->getData()->level1()->getLevel2());
 }