diff --git a/composer.json b/composer.json index c90e399..f6b735e 100644 --- a/composer.json +++ b/composer.json @@ -4,10 +4,10 @@ "keywords": [ ], "minimum-stability": "stable", - "require": { - "php": "^7.4 || ^8.0", - "jrosset/singleton": "^1.0", - "jrosset/arrayclasses": "^1.0" + "require": { + "php": "^7.4 || ^8.0", + "jrosset/singleton": "^1.0", + "jrosset/collections": "^2.0" }, "autoload": { "psr-4": { diff --git a/src/EnvReader/GenericConfig.php b/src/EnvReader/GenericConfig.php index d2c7ad3..637f1ac 100644 --- a/src/EnvReader/GenericConfig.php +++ b/src/EnvReader/GenericConfig.php @@ -5,9 +5,9 @@ namespace jrosset\EnvReader; use DateTime; use DateTimeInterface; use Exception; -use jrosset\ArrayClasses\IArrayCast; -use jrosset\ArrayClasses\ImmutableInsensitiveCaseArrayClass; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\IArrayCast; +use jrosset\Collections\InsensitiveCaseKeyCollection; +use jrosset\Collections\InsensitiveCaseKeyImmutableCollection; use jrosset\Singleton\TSingleton; use RangeException; use UnexpectedValueException; @@ -21,9 +21,9 @@ abstract class GenericConfig { use TSingleton; /** - * @var InsensitiveCaseArrayClass Current properties + * @var InsensitiveCaseKeyCollection Current properties */ - protected InsensitiveCaseArrayClass $properties; + protected InsensitiveCaseKeyCollection $properties; /** * Initialize initial properties then read ENV file @@ -31,7 +31,7 @@ abstract class GenericConfig { * @throws Exception If ENV can't be read */ protected function __construct () { - $this->properties = new InsensitiveCaseArrayClass($this->initialProperties()); + $this->properties = new InsensitiveCaseKeyCollection($this->initialProperties()); $this->readConfig(); } @@ -57,10 +57,10 @@ abstract class GenericConfig { /** * Get all properties * - * @return ImmutableInsensitiveCaseArrayClass Get all properties (properties' name are in upper case) + * @return InsensitiveCaseKeyImmutableCollection Get all properties (properties' name are in upper case) */ - public function getProperties (): ImmutableInsensitiveCaseArrayClass { - return $this->properties; + public function getProperties (): InsensitiveCaseKeyImmutableCollection { + return new InsensitiveCaseKeyImmutableCollection($this->properties); } /** * Check if a property id defined @@ -70,7 +70,7 @@ abstract class GenericConfig { * @return bool Is the property defined ? */ public function hasProperty (string $name): bool { - return $this->properties->has($name); + return $this->properties->exists($name); } /** * Get a property value @@ -160,7 +160,7 @@ abstract class GenericConfig { */ public function getPropertyAsInt (string $name, ?int $default = null): int { $value = $this->getProperty($name, $default === null ? null : (string)$default); - if (preg_match('#^\s*(?[0-9]+)\s*$#', $value, $match) !== 1) { + if (preg_match('#^\s*(?\d+)\s*$#', $value, $match) !== 1) { throw new RangeException('The "' . $name . '" property is not a valid integer : ' . $value); } return (int)$match['value']; @@ -181,7 +181,7 @@ abstract class GenericConfig { */ public function getPropertyAsReal (string $name, ?float $default = null): float { $value = $this->getProperty($name, $default === null ? null : (string)$default); - if (preg_match('#^\s*(?[0-9]+(?:\.[0-9]+)?)\s*$#', $value, $match) !== 1) { + if (preg_match('#^\s*(?\d+(?:\.\d+)?)\s*$#', $value, $match) !== 1) { throw new RangeException('The "' . $name . '" property is not a valid float value : ' . $value); } return (float)$match['value']; @@ -228,7 +228,7 @@ abstract class GenericConfig { } } if ($value === false) { - throw new RangeException('The "' . $name . '" property is not a valid date and time : ' . $value); + throw new RangeException('The "' . $name . '" property is not a valid date and time'); } return $value; diff --git a/src/EnvReader/IniConfig.php b/src/EnvReader/IniConfig.php index c58e54e..d3e7003 100644 --- a/src/EnvReader/IniConfig.php +++ b/src/EnvReader/IniConfig.php @@ -3,7 +3,7 @@ namespace jrosset\EnvReader; use Exception; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\InsensitiveCaseKeyCollection; /** * A INI file configuration class @@ -28,15 +28,15 @@ abstract class IniConfig extends GenericConfig implements IExternalConfigFile { /** * Parse an INI level to properties * - * @param array $iniLevelData The INI level - * @param InsensitiveCaseArrayClass $properties [OUT] The out properties list + * @param array $iniLevelData The INI level + * @param InsensitiveCaseKeyCollection $properties [OUT] The out properties list * * @return void */ - private static function parseIniLevel (array $iniLevelData, InsensitiveCaseArrayClass $properties): void { + private static function parseIniLevel (array $iniLevelData, InsensitiveCaseKeyCollection $properties): void { foreach ($iniLevelData as $iniKey => $iniValue) { if (is_array($iniValue)) { - self::parseIniLevel($iniValue, $subProperties = new InsensitiveCaseArrayClass()); + self::parseIniLevel($iniValue, $subProperties = new InsensitiveCaseKeyCollection()); $iniValue = $subProperties; } diff --git a/src/EnvReader/TMultiLevelProperties.php b/src/EnvReader/TMultiLevelProperties.php index 5cb1b41..e284ed1 100644 --- a/src/EnvReader/TMultiLevelProperties.php +++ b/src/EnvReader/TMultiLevelProperties.php @@ -2,9 +2,9 @@ namespace jrosset\EnvReader; -use jrosset\ArrayClasses\IArrayCast; -use jrosset\ArrayClasses\IArrayClass; -use jrosset\ArrayClasses\ImmutableArrayClass; +use jrosset\Collections\IArrayCast; +use jrosset\Collections\IImmutableCollection; +use jrosset\Collections\InsensitiveCaseKeyImmutableCollection; use UnexpectedValueException; /** @@ -23,8 +23,8 @@ trait TMultiLevelProperties { $value = $this->getProperties(); foreach ($levels as $level) { - if ($value instanceof IArrayClass) { - if (!$value->has($level)) { + if ($value instanceof IImmutableCollection) { + if (!$value->exists($level)) { return false; } $value = $value->get($level); @@ -62,7 +62,7 @@ trait TMultiLevelProperties { $value = $this->getProperties(); foreach ($levels as $level) { - if ($value instanceof IArrayClass) { + if ($value instanceof IImmutableCollection) { $value = $value->get($level); } else { @@ -88,9 +88,9 @@ trait TMultiLevelProperties { * * @param string|string[]|IArrayCast $propertyName The property name * - * @return ImmutableArrayClass The property levels + * @return InsensitiveCaseKeyImmutableCollection The property levels */ - private function getPropertyLevels ($propertyName): ImmutableArrayClass { + private function getPropertyLevels ($propertyName): InsensitiveCaseKeyImmutableCollection { if ($propertyName instanceof IArrayCast) { $parts = $propertyName->toArray(); } @@ -100,6 +100,6 @@ trait TMultiLevelProperties { else { $parts = explode($this->getPropertySeparator(), $propertyName); } - return new ImmutableArrayClass($parts); + return new InsensitiveCaseKeyImmutableCollection($parts); } } \ No newline at end of file diff --git a/src/EnvReader/XmlStructure/AttributesXmlStructure.php b/src/EnvReader/XmlStructure/AttributesXmlStructure.php index 20bd7cb..dc36136 100644 --- a/src/EnvReader/XmlStructure/AttributesXmlStructure.php +++ b/src/EnvReader/XmlStructure/AttributesXmlStructure.php @@ -2,7 +2,7 @@ namespace jrosset\EnvReader\XmlStructure; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\InsensitiveCaseKeyCollection; use SimpleXMLElement; /** @@ -14,16 +14,16 @@ class AttributesXmlStructure implements IXmlStructure { */ private array $allowed; /** - * @var InsensitiveCaseArrayClass Mapping between attributes name and properties name + * @var InsensitiveCaseKeyCollection Mapping between attributes name and properties name */ - private InsensitiveCaseArrayClass $mapping; + private InsensitiveCaseKeyCollection $mapping; /** * Initialize */ public function __construct () { $this->allowed = []; - $this->mapping = new InsensitiveCaseArrayClass(); + $this->mapping = new InsensitiveCaseKeyCollection(); } /** @@ -57,8 +57,8 @@ class AttributesXmlStructure implements IXmlStructure { /** * @inheritDoc */ - public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { - $properties = new InsensitiveCaseArrayClass(); + public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection { + $properties = new InsensitiveCaseKeyCollection(); if (($attributes = $xmlNode->attributes()) === null) { return $properties; } @@ -68,7 +68,7 @@ class AttributesXmlStructure implements IXmlStructure { if (!$allowAll && !in_array(mb_strtolower($attributeName), $this->allowed)) { continue; } - $properties->set($this->mapping->get($attributeName, false) ?? $attributeName, (string)$attributeValue); + $properties->set($this->mapping->get($attributeName) ?? $attributeName, (string)$attributeValue); } return $properties; } diff --git a/src/EnvReader/XmlStructure/ChildrenXmlStructure.php b/src/EnvReader/XmlStructure/ChildrenXmlStructure.php index 7f8f3c9..ba75d77 100644 --- a/src/EnvReader/XmlStructure/ChildrenXmlStructure.php +++ b/src/EnvReader/XmlStructure/ChildrenXmlStructure.php @@ -2,8 +2,8 @@ namespace jrosset\EnvReader\XmlStructure; -use jrosset\ArrayClasses\ArrayClass; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\Collection; +use jrosset\Collections\InsensitiveCaseKeyCollection; use SimpleXMLElement; /** @@ -13,20 +13,20 @@ class ChildrenXmlStructure implements IXmlStructure { use TAttributeListXmlStructure; /** - * @var ArrayClass The children nodes + * @var Collection The children nodes */ - private ArrayClass $childrenNodes; + private Collection $childrenNodes; /** - * @var InsensitiveCaseArrayClass Mapping between child node name and properties name + * @var Collection Mapping between child node name and properties name */ - private ArrayClass $mapping; + private Collection $mapping; /** * Initialize */ public function __construct () { - $this->childrenNodes = new ArrayClass(); - $this->mapping = new ArrayClass(); + $this->childrenNodes = new Collection(); + $this->mapping = new Collection(); } /** @@ -49,7 +49,7 @@ class ChildrenXmlStructure implements IXmlStructure { /** * @inheritDoc */ - public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { + public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection { $properties = $this->parseXmlAttributes($xmlNode); /** @var IXmlStructure $childNodeStructure */ @@ -58,7 +58,7 @@ class ChildrenXmlStructure implements IXmlStructure { continue; } $properties->set( - $this->mapping->get($childNodeName, false) ?? $childNodeName, + $this->mapping->get($childNodeName) ?? $childNodeName, $childNodeStructure->parseXml($xmlNode->$childNodeName) ); } diff --git a/src/EnvReader/XmlStructure/ListXmlStructure.php b/src/EnvReader/XmlStructure/ListXmlStructure.php index 61d1d70..f0f6c6d 100644 --- a/src/EnvReader/XmlStructure/ListXmlStructure.php +++ b/src/EnvReader/XmlStructure/ListXmlStructure.php @@ -2,7 +2,7 @@ namespace jrosset\EnvReader\XmlStructure; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\InsensitiveCaseKeyCollection; use SimpleXMLElement; /** @@ -32,15 +32,15 @@ class ListXmlStructure implements IXmlStructure { /** * @inheritDoc */ - public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { - $properties = new InsensitiveCaseArrayClass(); + public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection { + $properties = new InsensitiveCaseKeyCollection(); if (!isset($xmlNode->{$this->childNodeName})) { return $properties; } foreach ($xmlNode->{$this->childNodeName} as $childNode) { $childProperties = $this->childNodeStructure->parseXml($childNode); - $properties->push($childProperties); + $properties->add($childProperties); } return $properties; } diff --git a/src/EnvReader/XmlStructure/TAttributeListXmlStructure.php b/src/EnvReader/XmlStructure/TAttributeListXmlStructure.php index dfe3511..f4ae409 100644 --- a/src/EnvReader/XmlStructure/TAttributeListXmlStructure.php +++ b/src/EnvReader/XmlStructure/TAttributeListXmlStructure.php @@ -2,7 +2,7 @@ namespace jrosset\EnvReader\XmlStructure; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\InsensitiveCaseKeyCollection; use SimpleXMLElement; /** @@ -33,9 +33,9 @@ trait TAttributeListXmlStructure { * * @return mixed The extracted attributes */ - protected function parseXmlAttributes (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { + protected function parseXmlAttributes (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection { if ($this->attributesStructure === null) { - return new InsensitiveCaseArrayClass(); + return new InsensitiveCaseKeyCollection(); } return $this->attributesStructure->parseXml($xmlNode); diff --git a/src/EnvReader/XmlStructure/TextAndAttributesXmlStructure.php b/src/EnvReader/XmlStructure/TextAndAttributesXmlStructure.php index 67e3797..c364288 100644 --- a/src/EnvReader/XmlStructure/TextAndAttributesXmlStructure.php +++ b/src/EnvReader/XmlStructure/TextAndAttributesXmlStructure.php @@ -2,7 +2,7 @@ namespace jrosset\EnvReader\XmlStructure; -use jrosset\ArrayClasses\InsensitiveCaseArrayClass; +use jrosset\Collections\InsensitiveCaseKeyCollection; use SimpleXMLElement; /** @@ -34,7 +34,7 @@ class TextAndAttributesXmlStructure implements IXmlStructure { /** * @inheritDoc */ - public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { + public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection { $properties = $this->parseXmlAttributes($xmlNode); $properties->set($this->textPropertyName, $this->textXmlStructure->parseXml($xmlNode)); return $properties;