Compare commits

...

9 commits
1.0.0 ... main

Author SHA1 Message Date
2114c6e312 Merge pull request '1.1.0 - Add optional key argument to Collection::add method' (#2) from dev into main
Reviewed-on: #2
2025-04-12 14:12:11 +00:00
Daniel Winning
d439a25084 1.1.0 - Add optional key argument to Collection::add method 2025-04-12 15:11:06 +01:00
b638d684a2 Merge pull request '1.0.2 Release' (#1) from dev into main
Reviewed-on: #1
2025-04-10 03:23:52 +00:00
Daniel Winning
a986b85d2f Update CHANGELOG 2025-04-10 04:19:13 +01:00
Daniel Winning
787b91e880 Increase unit test coverage to 100% 2025-04-10 04:17:42 +01:00
Daniel Winning
b9c90339b4 Update encoding in PHP Coverage badge 2025-04-10 04:12:42 +01:00
Daniel Winning
69eed6681a Implement code coverage and badges 2025-04-10 04:11:14 +01:00
Daniel Winning
76db32a24e Minor package description update 2025-04-10 04:02:47 +01:00
Daniel Winning
73b5113f2f 1.0.1 - Update package description 2025-04-10 03:44:57 +01:00
8 changed files with 65 additions and 5 deletions

2
.gitattributes vendored
View file

@ -1,3 +1,5 @@
phpunit.xml export-ignore phpunit.xml export-ignore
tests/ export-ignore tests/ export-ignore
CHANGELOG.md export-ignore CHANGELOG.md export-ignore
package.json export-ignore
.gitignore export-ignore

3
.gitignore vendored
View file

@ -1,4 +1,7 @@
/.idea /.idea
/vendor /vendor
/node_modules
/coverage
composer.lock composer.lock
package-lock.json
.phpunit.result.cache .phpunit.result.cache

View file

@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.1.0] - 2025-04-12
### Added
- Add optional `key` argument to `AbstractCollection::add()` method
## [1.0.2] - 2025-04-10
### Changed
- Increased unit test coverage to 100%
## [1.0.1] - 2025-04-10
### Added
- Added description to `composer.json` to provide a description on Packagist.
## [1.0.0] - 2025-04-09 ## [1.0.0] - 2025-04-09
### Added ### Added
- Initial release of the `loomlabs/utility.collection` package. - Initial release of the `loomlabs/utility.collection` package.

View file

@ -1,5 +1,14 @@
# Loom Utilities | Collection # Loom Utilities | Collection
<div>
<!-- Version Badge -->
<img src="https://img.shields.io/badge/Version-1.1.0-blue" alt="Version 1.1.0">
<!-- PHP Coverage Badge -->
<img src="https://img.shields.io/badge/PHP%20Coverage-100.00%25-green" alt="PHP Coverage 100.00%">
<!-- License Badge -->
<img src="https://img.shields.io/badge/License-MIT-34ad9b" alt="License MIT">
</div>
A Collection library for an object-oriented way to work with arrays. A Collection library for an object-oriented way to work with arrays.
## Installation ## Installation

View file

@ -1,5 +1,6 @@
{ {
"name": "loomlabs/utility.collection", "name": "loomlabs/utility.collection",
"description": "An object-oriented way to work with arrays.",
"autoload": { "autoload": {
"psr-4": { "psr-4": {
"Loom\\Utility\\Collection\\": "src/" "Loom\\Utility\\Collection\\": "src/"
@ -10,7 +11,10 @@
"Loom\\Utility\\Collection\\Tests\\": "tests/" "Loom\\Utility\\Collection\\Tests\\": "tests/"
} }
}, },
"version": "1.0.0", "scripts": {
"test": "php -d xdebug.mode=coverage ./vendor/bin/phpunit --testdox --colors=always --coverage-html coverage --coverage-clover coverage/coverage.xml --testdox-html coverage/testdox.html && npx badger --phpunit ./coverage/coverage.xml && npx badger --version ./composer.json && npx badger --license ./composer.json"
},
"version": "1.1.0",
"license": "MIT", "license": "MIT",
"require-dev": { "require-dev": {
"phpunit/phpunit": "^12.1" "phpunit/phpunit": "^12.1"

5
package.json Normal file
View file

@ -0,0 +1,5 @@
{
"devDependencies": {
"@dannyxcii/badger": "^0.5.0"
}
}

View file

@ -12,12 +12,18 @@ class AbstractCollection implements CollectionInterface
{ {
} }
public function add(mixed $item): void public function add(mixed $item, string $key = null): void
{ {
if (null === $item) { if (null === $item) {
return; return;
} }
if ($key) {
$this->items[$key] = $item;
return;
}
$this->items[] = $item; $this->items[] = $item;
} }

View file

@ -11,10 +11,10 @@ use PHPUnit\Framework\TestCase;
class CollectionTest extends TestCase class CollectionTest extends TestCase
{ {
#[DataProvider('addDataProvider')] #[DataProvider('addDataProvider')]
public function testAdd(array $startingItems, mixed $itemToAdd, array $expectedResult): void public function testAdd(array $startingItems, mixed $itemToAdd, array $expectedResult, string $key = null): void
{ {
$collection = new Collection($startingItems); $collection = new Collection($startingItems);
$collection->add($itemToAdd); $collection->add($itemToAdd, $key);
$this->assertEquals($expectedResult, $collection->toArray()); $this->assertEquals($expectedResult, $collection->toArray());
} }
@ -35,6 +35,16 @@ class CollectionTest extends TestCase
$this->assertEquals($expectedResult, $collection->count()); $this->assertEquals($expectedResult, $collection->count());
} }
public function testIteration(): void
{
$array = ['A', 'B', 'C'];
$collection = new Collection($array);
foreach ($collection as $key => $value) {
$this->assertEquals($array[$key], $value);
}
}
public static function addDataProvider(): array public static function addDataProvider(): array
{ {
return [ return [
@ -42,17 +52,26 @@ class CollectionTest extends TestCase
'startingItems' => ['A', 'B', 'C'], 'startingItems' => ['A', 'B', 'C'],
'itemToAdd' => 'D', 'itemToAdd' => 'D',
'expectedResult' => ['A', 'B', 'C', 'D'], 'expectedResult' => ['A', 'B', 'C', 'D'],
'key' => null,
], ],
[ [
'startingItems' => [], 'startingItems' => [],
'itemToAdd' => 1, 'itemToAdd' => 1,
'expectedResult' => [1], 'expectedResult' => [1],
'key' => null,
], ],
[ [
'startingItems' => [], 'startingItems' => [],
'itemToAdd' => null, 'itemToAdd' => null,
'expectedResult' => [], 'expectedResult' => [],
'key' => null,
], ],
[
'startingItems' => ['A' => 'A', 'B' => 'B', 'C' => 'C'],
'itemToAdd' => 'D',
'expectedResult' => ['A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D'],
'key' => 'D',
]
]; ];
} }