Skip to content

Commit 4a7cc61

Browse files
author
Paul
committed
Added context parameter to filter strategy callback.
1 parent 443cb44 commit 4a7cc61

3 files changed

Lines changed: 25 additions & 4 deletions

File tree

src/Strategy/Filter.php

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,18 @@ public function __invoke($data, $context = null)
2727
return null;
2828
}
2929

30-
return array_filter($data, $this->callback ?: function ($value) {
31-
return $value !== null;
32-
});
30+
$filter = function (array $data, $context) {
31+
$callback = $this->callback ?: function ($value) {
32+
return $value !== null;
33+
};
34+
35+
foreach ($data as $datum) {
36+
if ($callback($datum, $context)) {
37+
yield $datum;
38+
}
39+
}
40+
};
41+
42+
return iterator_to_array($filter($data, $context));
3343
}
3444
}

test/MockFactory.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<?php
22
namespace ScriptFUSIONTest;
33

4+
use Mockery\MockInterface;
45
use ScriptFUSION\Mapper\Mapper;
56
use ScriptFUSION\StaticClass;
67

@@ -11,7 +12,7 @@ final class MockFactory
1112
/**
1213
* @param mixed $data
1314
*
14-
* @return Mapper
15+
* @return Mapper|MockInterface
1516
*/
1617
public static function mockMapper($data)
1718
{

test/Unit/Mapper/Strategy/FilterTest.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@ public function testCustomCallback()
3535
self::assertEquals([['foo' => 'bar']], $filter([]));
3636
}
3737

38+
public function testContextPassed()
39+
{
40+
$filter = new Filter(null, function ($_, $context) {
41+
self::assertSame('foo', $context);
42+
});
43+
$filter->setMapper(MockFactory::mockMapper(['bar']));
44+
45+
$filter([], 'foo');
46+
}
47+
3848
public function testNonArray()
3949
{
4050
$filter = new Filter(null);

0 commit comments

Comments
 (0)