public function testFromArray() { $arr = array('_type' => 'FakeObjectTest_Object', 'foo' => 'bar', 'hasOne' => array('_type' => 'FakeObjectTest_Object', 'hasOneProp' => 'baz'), 'hasMany' => array(array('_type' => 'FakeObjectTest_Object', 'hasManyProp' => 'baz')), 'bar' => 'baz'); $obj = FakeObject::create_from_array($arr); $this->assertNotNull($obj); $this->assertInstanceOf('FakeObjectTest_Object', $obj); $this->assertInstanceOf('FakeObjectTest_Object', $obj->hasOne); $this->assertInstanceOf('FakeObjectTest_Object', $obj->hasMany[0]); $this->assertEquals($obj->bar, 'baz'); $this->assertEquals('baz', $obj->hasOne->hasOneProp); $this->assertEquals('baz', $obj->hasMany[0]->hasManyProp); }
/** * Create nested object representation from array, * based on "_type" hints. * * @param Array * @return FakeObject */ public static function create_from_array($array) { // array_walk_recursive doesn't recurse into arrays... foreach ($array as &$v) { // Convert "has one" relations if (is_array($v)) { $v = FakeObject::create_from_array($v); } elseif (is_array($v)) { foreach ($v as &$v1) { if (is_array($v1)) { $v1 = FakeObject::create_from_array($v1); } } } } $class = isset($array['_type']) ? $array['_type'] : 'FakeObject'; unset($array['_type']); return new $class($array); }
/** * Updates an existing record. Merges with existing data. * Use {@link set()} to unset values. * * @param String $type * @param String $key * @param FakeObject $obj */ public function update($type, $key, FakeObject $obj) { $existing = $this->get($type, $key); $record = $existing ? array_merge($existing->toArray(), $obj->toArray()) : $obj->toArray(); $data = $this->getData(); if (!isset($data[$type])) { $data[$type] = array(); } $data[$type][$key] = $record; $this->setData($data); // $this->log(sprintf( // 'Update fake %s#%s: %s', // $type, // $key, // json_encode($record) // )); }