public function testTransformKeys()
    {
        $object = <<<OBJ
        {
            "first-name": "Frankie",
            "surname": "Manning",
            "meta": {
                "created-at": "2015-01-01",
                "updated-at": "2015-02-01"
            },
            "associates": [
                {
                    "first-name": "Ella",
                    "surname": "Fitzgerald"
                },
                {
                    "first-name": "Chick",
                    "surname": "Webb"
                }
            ]
        }
OBJ;
        $expected = <<<OBJ
        {
            "first_name": "Frankie",
            "surname": "Manning",
            "meta": {
                "created_at": "2015-01-01",
                "updated_at": "2015-02-01"
            },
            "associates": [
                {
                    "first_name": "Ella",
                    "surname": "Fitzgerald"
                },
                {
                    "first_name": "Chick",
                    "surname": "Webb"
                }
            ]
        }
OBJ;
        $object = $this->toObject($object);
        $actual = ObjectUtils::transformKeys($object, function ($key) {
            return is_int($key) ? $key : str_replace('-', '_', $key);
        });
        $this->assertEquals($this->toObject($expected), $actual);
        $this->assertSame($object, $actual);
        $this->assertSame($object->meta, $actual->meta);
    }
 /**
  * @param callable $transform
  * @return $this
  */
 public function transformKeys(callable $transform)
 {
     ObjectUtils::transformKeys($this->getProxy(), $transform);
     return $this;
 }