PluginProbe
GiveWP – Donation Plugin and Fundraising Platform / 4.17.0
GiveWP – Donation Plugin and Fundraising Platform v4.17.0
4.17.0 4.16.9 4.16.8.1 4.16.8 4.16.7.2 4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 All 256 releases
give / vendor / vendor-prefixed / stellarwp / licensing-api-client / src / Responses / ValueObjects / CapabilityCollection.php

CapabilityCollection.php in GiveWP – Donation Plugin and Fundraising Platform 4.17.0, at vendor/vendor-prefixed/stellarwp/licensing-api-client/src/Responses/ValueObjects/CapabilityCollection.php

107 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php declare(strict_types=1);
2
3 namespace Give\Vendors\LiquidWeb\LicensingApiClient\Responses\ValueObjects;
4
5 use ArrayAccess;
6 use ArrayIterator;
7 use Countable;
8 use IteratorAggregate;
9 use Give\Vendors\LiquidWeb\LicensingApiClient\Responses\Contracts\Response;
10 use LogicException;
11 use Traversable;
12
13 /**
14 * Immutable ordered set of capability names.
15 *
16 * @implements Response<list<string>>
17 * @implements ArrayAccess<int, string>
18 * @implements IteratorAggregate<int, string>
19 */
20 final class CapabilityCollection implements ArrayAccess, Countable, IteratorAggregate, Response
21 {
22 /**
23 * @var list<string>
24 */
25 private array $items;
26
27 /**
28 * @var array<string, true>
29 */
30 private array $lookup;
31
32 /**
33 * @param list<string> $items
34 */
35 private function __construct(array $items) {
36 $this->items = array_values(array_unique($items));
37 $this->lookup = array_fill_keys($this->items, true);
38 }
39
40 /**
41 * @param array<int, string> $attributes
42 */
43 public static function from(array $attributes): self {
44 return new self(array_values($attributes));
45 }
46
47 public function has(string $capability): bool {
48 return isset($this->lookup[$capability]);
49 }
50
51 public function isEmpty(): bool {
52 return $this->items === [];
53 }
54
55 public function count(): int {
56 return count($this->items);
57 }
58
59 /**
60 * @return ArrayIterator<int, string>
61 */
62 public function getIterator(): Traversable {
63 return new ArrayIterator($this->items);
64 }
65
66 /**
67 * @param string|mixed $offset
68 */
69 public function offsetExists($offset): bool {
70 return is_int($offset) && isset($this->items[$offset]);
71 }
72
73 /**
74 * @param string|mixed $offset
75 */
76 public function offsetGet($offset): ?string {
77 if (! is_int($offset)) {
78 return null;
79 }
80
81 return $this->items[$offset] ?? null;
82 }
83
84 public function toArray(): array {
85 return $this->items;
86 }
87
88 /**
89 * @param string|mixed $offset
90 * @param mixed $value The value to set.
91 *
92 * @throws LogicException
93 */
94 public function offsetSet($offset, $value): void {
95 throw new LogicException('CapabilityCollection is immutable.');
96 }
97
98 /**
99 * @param string|mixed $offset
100 *
101 * @throws LogicException
102 */
103 public function offsetUnset($offset): void {
104 throw new LogicException('CapabilityCollection is immutable.');
105 }
106 }
107