public function test() { $data = new \ArrayObject($this->getData()); $this->assertEquals('aa', gs\get($data, 'a.aa')); $this->assertEquals(null, gs\get($data, 'c', 'default')); $this->assertEquals('default', gs\get($data, 'd', 'default')); gs\set($data, 'd', array(0, 1, 2, 3, 4, 5)); $this->assertEquals(4, gs\get($data, 'd.4')); }
public function testMagicMethods() { $data = new MagicAccessTestClass(); $data->first_name = 'Joe'; $data->last_name = 'Rock'; gs\setValue($data, 'profession', 'Stone cutter'); gs\setValue($data, 'address', new MagicAccessTestClass()); gs\set($data, 'address.city', 'Little Rock'); $this->assertEquals('Joe', gs\getValue($data, 'first_name')); $this->assertEquals('Rock', gs\get($data, 'last_name')); $this->assertEquals('Little Rock', gs\get($data, 'address.city')); }
/** * @param array|ArrayAccess|object $doc * @param string[] $path -- array of field names * @param mixed $value * @return array|ArrayAccess|object */ public static function setPath($doc, $path, $value) { return gs\set($doc, $path, $value); }
public function testSetNull() { $this->assertEquals(array('name' => array('first' => 'Joe')), gs\set(null, 'name.first', 'Joe')); $this->assertEquals(array('name.first' => 'Joe'), gs\setValue(null, 'name.first', 'Joe')); }
/** * Reassembles a traversed sequence into its original shape * * @param Iterator $iterator * @param string $pathSeparator * @return Sequence */ public static function reassemble(Iterator $iterator, $pathSeparator = '.') { return self::wrapFunctionIntoSequenceOnDemand(function () use($iterator, $pathSeparator) { return Sequence::make($iterator)->reduceToSequence(array(), function ($collection, $value, $path) use($pathSeparator) { return gs\set($collection, $path, $value, $pathSeparator); }); }); }
public function testSetEmptyPath() { $uniqueObject = (object) array(); $this->assertEquals($uniqueObject, gs\set(array(), array(), $uniqueObject)); }
/** * Generates a function that will apply a mapping function to the record and write the result into a * field in the record. The record can be an array or an object. * * The field name can be a path. * * Special case, a null record will result in: array($fieldName => $fnMap(null)) * * @param string $fieldName -- field name or path * @param \Closure $fnMap($record, $key) -- the value returned from this function will be put into $record at $fieldName * @return Closure */ function fnMapToField($fieldName, $fnMap) { return function ($record, $key = null) use($fieldName, $fnMap) { return gs\set($record, $fieldName, $fnMap($record, $key)); }; }
/** * @description Sets the field value based upon the path. * @param array|object $data * @param string|array $pathToField * @param mixed $value * @param string $pathSeparator * @return mixed */ public function set($data, $pathToField, $value, $pathSeparator = null) { $pathSeparator = $pathSeparator ?: $this->pathSeparator; return gs\set($data, $pathToField, $value, $pathSeparator); }