Compare commits

..

2 Commits

Author SHA1 Message Date
Steve Boyd
0225c563e1
Merge 41cbfe4e49 into ba97de9458 2024-10-21 21:49:23 +00:00
Steve Boyd
41cbfe4e49 API Combine Sortable, Filterable and Limitable into SS_List 2024-10-22 10:49:17 +13:00
5 changed files with 24 additions and 20 deletions

View File

@ -851,7 +851,7 @@ class ArrayList extends ModelData implements SS_List
} }
/** /**
* @see Filterable::filterByCallback() * @see SS_List::filterByCallback()
* *
* @example $list = $list->filterByCallback(function($item, $list) { return $item->Age == 9; }) * @example $list = $list->filterByCallback(function($item, $list) { return $item->Age == 9; })
* @param callable $callback * @param callable $callback
@ -861,7 +861,7 @@ class ArrayList extends ModelData implements SS_List
{ {
if (!is_callable($callback)) { if (!is_callable($callback)) {
throw new LogicException(sprintf( throw new LogicException(sprintf(
"SS_Filterable::filterByCallback() passed callback must be callable, '%s' given", "SS_List::filterByCallback() passed callback must be callable, '%s' given",
gettype($callback) gettype($callback)
)); ));
} }

View File

@ -11,19 +11,18 @@ use Traversable;
* functionality. It passes through list methods to the underlying list * functionality. It passes through list methods to the underlying list
* implementation. * implementation.
* *
* @template TList of SS_List
* @template T * @template T
* @implements SS_List<T> * @implements SS_List<T>
*/ */
abstract class ListDecorator extends ModelData implements SS_List abstract class ListDecorator extends ModelData implements SS_List
{ {
/** /**
* @var TList<T> * @var SS_List<T>
*/ */
protected SS_List&Sortable&Filterable&Limitable $list; protected SS_List $list;
/** /**
* @param TList<T> $list * @param SS_List<T> $list
*/ */
public function __construct(SS_List $list) public function __construct(SS_List $list)
{ {
@ -32,7 +31,7 @@ abstract class ListDecorator extends ModelData implements SS_List
} }
/** /**
* @return TList<T> * @return SS_List<T>
*/ */
public function getList(): SS_List public function getList(): SS_List
{ {
@ -45,10 +44,10 @@ abstract class ListDecorator extends ModelData implements SS_List
* Useful for keeping a decorator/paginated list configuration intact while modifying * Useful for keeping a decorator/paginated list configuration intact while modifying
* the underlying list. * the underlying list.
* *
* @template TListA * @template SS_ListA
* @template TA * @template TA
* @param TListA<TA> $list * @param SS_ListA<TA> $list
* @return static<TListA, TA> * @return static<SS_ListA, TA>
*/ */
public function setList(SS_List $list): ListDecorator public function setList(SS_List $list): ListDecorator
{ {
@ -162,7 +161,7 @@ abstract class ListDecorator extends ModelData implements SS_List
} }
/** /**
* @return TList<T> * @return SS_List<T>
*/ */
public function each($callback) public function each($callback)
{ {
@ -188,7 +187,7 @@ abstract class ListDecorator extends ModelData implements SS_List
* @example $list->sort('Name', 'ASC'); * @example $list->sort('Name', 'ASC');
* @example $list->sort(array('Name'=>'ASC,'Age'=>'DESC')); * @example $list->sort(array('Name'=>'ASC,'Age'=>'DESC'));
* *
* @return TList<T> * @return SS_List<T>
*/ */
public function sort() public function sort()
{ {
@ -208,7 +207,7 @@ abstract class ListDecorator extends ModelData implements SS_List
* @example $list->filter(array('Name'=>'bob, 'Age'=>21)); // bob or someone with Age 21 * @example $list->filter(array('Name'=>'bob, 'Age'=>21)); // bob or someone with Age 21
* @example $list->filter(array('Name'=>'bob, 'Age'=>array(21, 43))); // bob or anyone with Age 21 or 43 * @example $list->filter(array('Name'=>'bob, 'Age'=>array(21, 43))); // bob or anyone with Age 21 or 43
* *
* @return TList<T> * @return SS_List<T>
*/ */
public function filter() public function filter()
{ {
@ -236,7 +235,7 @@ abstract class ListDecorator extends ModelData implements SS_List
* *
* @param string|array See {@link filter()} * @param string|array See {@link filter()}
* *
* @return TList<T> * @return SS_List<T>
*/ */
public function filterAny() public function filterAny()
{ {
@ -256,7 +255,7 @@ abstract class ListDecorator extends ModelData implements SS_List
{ {
if (!is_callable($callback)) { if (!is_callable($callback)) {
throw new LogicException(sprintf( throw new LogicException(sprintf(
"SS_Filterable::filterByCallback() passed callback must be callable, '%s' given", "SS_List::filterByCallback() passed callback must be callable, '%s' given",
gettype($callback) gettype($callback)
)); ));
} }
@ -270,7 +269,7 @@ abstract class ListDecorator extends ModelData implements SS_List
} }
/** /**
* @return TList<T> * @return SS_List<T>
*/ */
public function limit(?int $length, int $offset = 0): SS_List public function limit(?int $length, int $offset = 0): SS_List
{ {
@ -287,7 +286,7 @@ abstract class ListDecorator extends ModelData implements SS_List
* *
* @param array $ids Array of integers * @param array $ids Array of integers
* *
* @return TList<T> * @return SS_List<T>
*/ */
public function byIDs($ids) public function byIDs($ids)
{ {
@ -302,7 +301,7 @@ abstract class ListDecorator extends ModelData implements SS_List
* @example $list->exclude(array('Name'=>'bob, 'Age'=>21)); // exclude bob or someone with Age 21 * @example $list->exclude(array('Name'=>'bob, 'Age'=>21)); // exclude bob or someone with Age 21
* @example $list->exclude(array('Name'=>'bob, 'Age'=>array(21, 43))); // exclude bob or anyone with Age 21 or 43 * @example $list->exclude(array('Name'=>'bob, 'Age'=>array(21, 43))); // exclude bob or anyone with Age 21 or 43
* *
* @return TList<T> * @return SS_List<T>
*/ */
public function exclude() public function exclude()
{ {

View File

@ -15,6 +15,11 @@ use IteratorAggregate;
*/ */
interface SS_List extends ArrayAccess, Countable, IteratorAggregate interface SS_List extends ArrayAccess, Countable, IteratorAggregate
{ {
/**
* Representation of the list for use in a template
*/
public function forTemplate(): string;
/** /**
* Returns all the items in the list in an array. * Returns all the items in the list in an array.
* *

View File

@ -595,7 +595,7 @@ class DataList extends ModelData implements SS_List
{ {
if (!is_callable($callback)) { if (!is_callable($callback)) {
throw new LogicException(sprintf( throw new LogicException(sprintf(
"SS_Filterable::filterByCallback() passed callback must be callable, '%s' given", "SS_List::filterByCallback() passed callback must be callable, '%s' given",
gettype($callback) gettype($callback)
)); ));
} }

View File

@ -1455,7 +1455,7 @@ class ArrayListTest extends SapphireTest
$this->assertEquals(2, $list->count()); $this->assertEquals(2, $list->count());
$this->assertEquals($steve, $list[0]->toMap(), 'List should only contain Steve and Clair'); $this->assertEquals($steve, $list[0]->toMap(), 'List should only contain Steve and Clair');
$this->assertEquals($clair, $list[1]->toMap(), 'List should only contain Steve and Clair'); $this->assertEquals($clair, $list[1]->toMap(), 'List should only contain Steve and Clair');
$this->assertTrue($list instanceof SS_List, 'The List should be of type SS_Filterable'); $this->assertTrue($list instanceof SS_List, 'The List should be of type SS_List');
} }
/** /**