Skip to content

Commit

Permalink
Add new case_insensitive flag to order filter
Browse files Browse the repository at this point in the history
  • Loading branch information
allejo committed Jun 15, 2019
1 parent e65cc1b commit 29246bc
Show file tree
Hide file tree
Showing 2 changed files with 144 additions and 2 deletions.
10 changes: 8 additions & 2 deletions src/allejo/stakx/Templating/Twig/Extension/OrderFilter.php
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,23 @@

class OrderFilter extends AbstractTwigExtension implements TwigFilterInterface
{
public function __invoke($array, $key, $order = 'ASC')
public function __invoke($array, $key, $order = 'ASC', $case_insensitive = false)
{
if (!is_array($array))
{
return $array;
}

usort($array, function ($a, $b) use ($key, $order) {
usort($array, function ($a, $b) use ($key, $order, $case_insensitive) {
$aValue = __::get($a, $key);
$bValue = __::get($b, $key);

if ($case_insensitive)
{
$aValue = strtolower($aValue);
$bValue = strtolower($bValue);
}

if ($aValue == $bValue)
{
return 0;
Expand Down
136 changes: 136 additions & 0 deletions tests/allejo/stakx/Test/Templating/Twig/Extension/OrderFilterTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ public static function dataProvider_singleLevelArray()
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'super size me',
'sort' => 10,
],
],
],
];
Expand All @@ -52,6 +56,10 @@ public function testOrderFilterAscOnArray($dataset)
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'super size me',
'sort' => 10,
],
[
'name' => 'Order of Bacon',
'sort' => 30,
Expand All @@ -70,6 +78,99 @@ public function testOrderFilterDescOnArray($dataset)
{
$orderFilter = new OrderFilter();
$result = $orderFilter($dataset, 'sort', 'DESC');
$expected = [
[
'name' => 'Order of Bacon',
'sort' => 30,
],
[
'name' => 'super size me',
'sort' => 10,
],
[
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'Whee',
'sort' => 0,
],
];

$this->assertEquals($expected, $result);
}

/**
* @dataProvider dataProvider_singleLevelArray
*
* @param array $dataset
*/
public function testOrderFilterAscOnArrayCaseSensitive($dataset)
{
$orderFilter = new OrderFilter();
$result = $orderFilter($dataset, 'name', 'ASC');
$expected = [
[
'name' => 'Order of Bacon',
'sort' => 30,
],
[
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'Whee',
'sort' => 0,
],
[
'name' => 'super size me',
'sort' => 10,
],
];

$this->assertEquals($expected, $result);
}

/**
* @dataProvider dataProvider_singleLevelArray
*
* @param array $dataset
*/
public function testOrderFilterDescOnArrayCaseSensitive($dataset)
{
$orderFilter = new OrderFilter();
$result = $orderFilter($dataset, 'name', 'DESC');
$expected = [
[
'name' => 'super size me',
'sort' => 10,
],
[
'name' => 'Whee',
'sort' => 0,
],
[
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'Order of Bacon',
'sort' => 30,
],
];

$this->assertEquals($expected, $result);
}

/**
* @dataProvider dataProvider_singleLevelArray
*
* @param array $dataset
*/
public function testOrderFilterAscOnArrayCaseInsensitive($dataset)
{
$orderFilter = new OrderFilter();
$result = $orderFilter($dataset, 'name', 'ASC', true);
$expected = [
[
'name' => 'Order of Bacon',
Expand All @@ -79,10 +180,45 @@ public function testOrderFilterDescOnArray($dataset)
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'super size me',
'sort' => 10,
],
[
'name' => 'Whee',
'sort' => 0,
],
];

$this->assertEquals($expected, $result);
}

/**
* @dataProvider dataProvider_singleLevelArray
*
* @param array $dataset
*/
public function testOrderFilterDescOnArrayCaseInsensitive($dataset)
{
$orderFilter = new OrderFilter();
$result = $orderFilter($dataset, 'name', 'DESC', true);
$expected = [
[
'name' => 'Whee',
'sort' => 0,
],
[
'name' => 'super size me',
'sort' => 10,
],
[
'name' => 'Side order of fries',
'sort' => 3,
],
[
'name' => 'Order of Bacon',
'sort' => 30,
],
];

$this->assertEquals($expected, $result);
Expand Down

0 comments on commit 29246bc

Please # to comment.