Skip to content

Commit 4bafd9a

Browse files
committed
reworked bookmark class
1 parent 4512c5a commit 4bafd9a

File tree

1 file changed

+15
-33
lines changed

1 file changed

+15
-33
lines changed

src/Databags/Bookmark.php

Lines changed: 15 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -13,65 +13,47 @@
1313

1414
namespace Laudis\Neo4j\Databags;
1515

16-
use function bin2hex;
17-
use Exception;
18-
use function random_bytes;
19-
use function substr;
16+
use function array_unique;
2017

2118
final class Bookmark
2219
{
2320
/** @var list<string> */
24-
private array $bookmarks;
21+
private array $values;
2522

2623
/**
2724
* @param list<string> $bookmarks
2825
*/
29-
public function __construct(?array $bookmarks = null)
26+
public function __construct(?iterable $bookmarks = null)
3027
{
31-
$this->bookmarks = $bookmarks ?? [];
28+
$this->values = $bookmarks ?? [];
3229
}
3330

3431
public function isEmpty(): bool
3532
{
36-
return count($this->bookmarks) === 0;
33+
return count($this->values) === 0;
3734
}
3835

3936
/**
4037
* @return list<string>
4138
*/
4239
public function values(): array
4340
{
44-
return $this->bookmarks;
41+
return $this->values;
4542
}
4643

4744
/**
48-
* @throws Exception
45+
* @param iterable<Bookmark>|null $bookmarks
4946
*/
50-
public function withIncrement(?string $bookmark = null): self
47+
public static function from(?iterable $bookmarks): self
5148
{
52-
$copy = $this->bookmarks;
53-
if ($bookmark === null) {
54-
$bookmark = $this->generateUuidV4();
55-
}
56-
$copy[] = $bookmark;
57-
58-
return new self($copy);
59-
}
49+
$bookmarks ??= [];
50+
$values = [];
6051

61-
/**
62-
* @throws Exception
63-
*/
64-
private function generateUuidV4(): string
65-
{
66-
$uuid = random_bytes(16);
67-
$uuid[6] = ((int) $uuid[6]) & 0x0F | 0x40;
68-
$uuid[8] = ((int) $uuid[8]) & 0x3F | 0x80;
69-
$uuid = bin2hex($uuid);
52+
foreach ($bookmarks as $bookmark) {
53+
array_push($values, ...$bookmark->values());
54+
$values = array_values(array_unique($values));
55+
}
7056

71-
return substr($uuid, 0, 8).'-'
72-
.substr($uuid, 8, 4).'-'
73-
.substr($uuid, 12, 4).'-'
74-
.substr($uuid, 16, 4).'-'
75-
.substr($uuid, 20, 12);
57+
return new self($values);
7658
}
7759
}

0 commit comments

Comments
 (0)