Skip to content

Commit

Permalink
Adding support for stdClass to be used as a map
Browse files Browse the repository at this point in the history
  • Loading branch information
stefanoj3 committed Oct 23, 2018
1 parent 5be831b commit bbd39ea
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
12 changes: 9 additions & 3 deletions lib/MainTransformation.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public function __invoke($data, callable $transformation = null)

$transformation = $transformation ?: $this;

if (is_object($data)) {
if (is_object($data) && !$data instanceof \stdClass) {
try {
return $this->resolveTransformation($data)($data, $transformation);
} catch (TransformationNotFound $e) {
Expand Down Expand Up @@ -90,8 +90,14 @@ private function transformIterable($data, callable $transformation): array
{
$array = [];

foreach ($data as $item) {
$array[] = $this($item, $transformation);
if ($data instanceof \stdClass) {
foreach ($data as $key => $item) {
$array[$key] = $this($item, $transformation);
}
} else {
foreach ($data as $item) {
$array[] = $this($item, $transformation);
}
}

return $array;
Expand Down
4 changes: 3 additions & 1 deletion tests/MainTransformationTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,9 @@ public function shouldCallTransformationWithSpecifiedTransformer($data, $expecte
public function provideTransformData()
{
return [

[ ['abc' => 1], [1] ],
[ (object) [ 'abc' => 1 ], [ 'abc' => 1 ] ],
[ (object) [ 'abc' => new DataSample1 ], [ 'abc' => DataSample1::class ] ],
[ new DataSample1, DataSample1::class ],
[ [ new DataSample1, new DataSample2 ], [ DataSample1::class, DataSample2::class ] ],
[ new \ArrayIterator([ new DataSample1, new DataSample2 ]), [ DataSample1::class, DataSample2::class ] ],
Expand Down

0 comments on commit bbd39ea

Please sign in to comment.