Use of jrosset/collections 2.*

2.x 2.4.0
Julien Rosset 3 years ago
parent 3c8b623985
commit ab99014b95

@ -7,7 +7,7 @@
"require": { "require": {
"php": "^7.4 || ^8.0", "php": "^7.4 || ^8.0",
"jrosset/singleton": "^1.0", "jrosset/singleton": "^1.0",
"jrosset/arrayclasses": "^1.0" "jrosset/collections": "^2.0"
}, },
"autoload": { "autoload": {
"psr-4": { "psr-4": {

@ -5,9 +5,9 @@ namespace jrosset\EnvReader;
use DateTime; use DateTime;
use DateTimeInterface; use DateTimeInterface;
use Exception; use Exception;
use jrosset\ArrayClasses\IArrayCast; use jrosset\Collections\IArrayCast;
use jrosset\ArrayClasses\ImmutableInsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyImmutableCollection;
use jrosset\Singleton\TSingleton; use jrosset\Singleton\TSingleton;
use RangeException; use RangeException;
use UnexpectedValueException; use UnexpectedValueException;
@ -21,9 +21,9 @@ abstract class GenericConfig {
use TSingleton; use TSingleton;
/** /**
* @var InsensitiveCaseArrayClass Current properties * @var InsensitiveCaseKeyCollection Current properties
*/ */
protected InsensitiveCaseArrayClass $properties; protected InsensitiveCaseKeyCollection $properties;
/** /**
* Initialize initial properties then read ENV file * Initialize initial properties then read ENV file
@ -31,7 +31,7 @@ abstract class GenericConfig {
* @throws Exception If ENV can't be read * @throws Exception If ENV can't be read
*/ */
protected function __construct () { protected function __construct () {
$this->properties = new InsensitiveCaseArrayClass($this->initialProperties()); $this->properties = new InsensitiveCaseKeyCollection($this->initialProperties());
$this->readConfig(); $this->readConfig();
} }
@ -57,10 +57,10 @@ abstract class GenericConfig {
/** /**
* Get all properties * 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 { public function getProperties (): InsensitiveCaseKeyImmutableCollection {
return $this->properties; return new InsensitiveCaseKeyImmutableCollection($this->properties);
} }
/** /**
* Check if a property id defined * Check if a property id defined
@ -70,7 +70,7 @@ abstract class GenericConfig {
* @return bool Is the property defined ? * @return bool Is the property defined ?
*/ */
public function hasProperty (string $name): bool { public function hasProperty (string $name): bool {
return $this->properties->has($name); return $this->properties->exists($name);
} }
/** /**
* Get a property value * Get a property value
@ -160,7 +160,7 @@ abstract class GenericConfig {
*/ */
public function getPropertyAsInt (string $name, ?int $default = null): int { public function getPropertyAsInt (string $name, ?int $default = null): int {
$value = $this->getProperty($name, $default === null ? null : (string)$default); $value = $this->getProperty($name, $default === null ? null : (string)$default);
if (preg_match('#^\s*(?<value>[0-9]+)\s*$#', $value, $match) !== 1) { if (preg_match('#^\s*(?<value>\d+)\s*$#', $value, $match) !== 1) {
throw new RangeException('The "' . $name . '" property is not a valid integer : ' . $value); throw new RangeException('The "' . $name . '" property is not a valid integer : ' . $value);
} }
return (int)$match['value']; return (int)$match['value'];
@ -181,7 +181,7 @@ abstract class GenericConfig {
*/ */
public function getPropertyAsReal (string $name, ?float $default = null): float { public function getPropertyAsReal (string $name, ?float $default = null): float {
$value = $this->getProperty($name, $default === null ? null : (string)$default); $value = $this->getProperty($name, $default === null ? null : (string)$default);
if (preg_match('#^\s*(?<value>[0-9]+(?:\.[0-9]+)?)\s*$#', $value, $match) !== 1) { if (preg_match('#^\s*(?<value>\d+(?:\.\d+)?)\s*$#', $value, $match) !== 1) {
throw new RangeException('The "' . $name . '" property is not a valid float value : ' . $value); throw new RangeException('The "' . $name . '" property is not a valid float value : ' . $value);
} }
return (float)$match['value']; return (float)$match['value'];
@ -228,7 +228,7 @@ abstract class GenericConfig {
} }
} }
if ($value === false) { 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; return $value;

@ -3,7 +3,7 @@
namespace jrosset\EnvReader; namespace jrosset\EnvReader;
use Exception; use Exception;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
/** /**
* A INI file configuration class * A INI file configuration class
@ -29,14 +29,14 @@ abstract class IniConfig extends GenericConfig implements IExternalConfigFile {
* Parse an INI level to properties * Parse an INI level to properties
* *
* @param array $iniLevelData The INI level * @param array $iniLevelData The INI level
* @param InsensitiveCaseArrayClass $properties [OUT] The out properties list * @param InsensitiveCaseKeyCollection $properties [OUT] The out properties list
* *
* @return void * @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) { foreach ($iniLevelData as $iniKey => $iniValue) {
if (is_array($iniValue)) { if (is_array($iniValue)) {
self::parseIniLevel($iniValue, $subProperties = new InsensitiveCaseArrayClass()); self::parseIniLevel($iniValue, $subProperties = new InsensitiveCaseKeyCollection());
$iniValue = $subProperties; $iniValue = $subProperties;
} }

@ -2,9 +2,9 @@
namespace jrosset\EnvReader; namespace jrosset\EnvReader;
use jrosset\ArrayClasses\IArrayCast; use jrosset\Collections\IArrayCast;
use jrosset\ArrayClasses\IArrayClass; use jrosset\Collections\IImmutableCollection;
use jrosset\ArrayClasses\ImmutableArrayClass; use jrosset\Collections\InsensitiveCaseKeyImmutableCollection;
use UnexpectedValueException; use UnexpectedValueException;
/** /**
@ -23,8 +23,8 @@ trait TMultiLevelProperties {
$value = $this->getProperties(); $value = $this->getProperties();
foreach ($levels as $level) { foreach ($levels as $level) {
if ($value instanceof IArrayClass) { if ($value instanceof IImmutableCollection) {
if (!$value->has($level)) { if (!$value->exists($level)) {
return false; return false;
} }
$value = $value->get($level); $value = $value->get($level);
@ -62,7 +62,7 @@ trait TMultiLevelProperties {
$value = $this->getProperties(); $value = $this->getProperties();
foreach ($levels as $level) { foreach ($levels as $level) {
if ($value instanceof IArrayClass) { if ($value instanceof IImmutableCollection) {
$value = $value->get($level); $value = $value->get($level);
} }
else { else {
@ -88,9 +88,9 @@ trait TMultiLevelProperties {
* *
* @param string|string[]|IArrayCast $propertyName The property name * @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) { if ($propertyName instanceof IArrayCast) {
$parts = $propertyName->toArray(); $parts = $propertyName->toArray();
} }
@ -100,6 +100,6 @@ trait TMultiLevelProperties {
else { else {
$parts = explode($this->getPropertySeparator(), $propertyName); $parts = explode($this->getPropertySeparator(), $propertyName);
} }
return new ImmutableArrayClass($parts); return new InsensitiveCaseKeyImmutableCollection($parts);
} }
} }

@ -2,7 +2,7 @@
namespace jrosset\EnvReader\XmlStructure; namespace jrosset\EnvReader\XmlStructure;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
@ -14,16 +14,16 @@ class AttributesXmlStructure implements IXmlStructure {
*/ */
private array $allowed; 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 * Initialize
*/ */
public function __construct () { public function __construct () {
$this->allowed = []; $this->allowed = [];
$this->mapping = new InsensitiveCaseArrayClass(); $this->mapping = new InsensitiveCaseKeyCollection();
} }
/** /**
@ -57,8 +57,8 @@ class AttributesXmlStructure implements IXmlStructure {
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection {
$properties = new InsensitiveCaseArrayClass(); $properties = new InsensitiveCaseKeyCollection();
if (($attributes = $xmlNode->attributes()) === null) { if (($attributes = $xmlNode->attributes()) === null) {
return $properties; return $properties;
} }
@ -68,7 +68,7 @@ class AttributesXmlStructure implements IXmlStructure {
if (!$allowAll && !in_array(mb_strtolower($attributeName), $this->allowed)) { if (!$allowAll && !in_array(mb_strtolower($attributeName), $this->allowed)) {
continue; continue;
} }
$properties->set($this->mapping->get($attributeName, false) ?? $attributeName, (string)$attributeValue); $properties->set($this->mapping->get($attributeName) ?? $attributeName, (string)$attributeValue);
} }
return $properties; return $properties;
} }

@ -2,8 +2,8 @@
namespace jrosset\EnvReader\XmlStructure; namespace jrosset\EnvReader\XmlStructure;
use jrosset\ArrayClasses\ArrayClass; use jrosset\Collections\Collection;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
@ -13,20 +13,20 @@ class ChildrenXmlStructure implements IXmlStructure {
use TAttributeListXmlStructure; 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 * Initialize
*/ */
public function __construct () { public function __construct () {
$this->childrenNodes = new ArrayClass(); $this->childrenNodes = new Collection();
$this->mapping = new ArrayClass(); $this->mapping = new Collection();
} }
/** /**
@ -49,7 +49,7 @@ class ChildrenXmlStructure implements IXmlStructure {
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection {
$properties = $this->parseXmlAttributes($xmlNode); $properties = $this->parseXmlAttributes($xmlNode);
/** @var IXmlStructure $childNodeStructure */ /** @var IXmlStructure $childNodeStructure */
@ -58,7 +58,7 @@ class ChildrenXmlStructure implements IXmlStructure {
continue; continue;
} }
$properties->set( $properties->set(
$this->mapping->get($childNodeName, false) ?? $childNodeName, $this->mapping->get($childNodeName) ?? $childNodeName,
$childNodeStructure->parseXml($xmlNode->$childNodeName) $childNodeStructure->parseXml($xmlNode->$childNodeName)
); );
} }

@ -2,7 +2,7 @@
namespace jrosset\EnvReader\XmlStructure; namespace jrosset\EnvReader\XmlStructure;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
@ -32,15 +32,15 @@ class ListXmlStructure implements IXmlStructure {
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection {
$properties = new InsensitiveCaseArrayClass(); $properties = new InsensitiveCaseKeyCollection();
if (!isset($xmlNode->{$this->childNodeName})) { if (!isset($xmlNode->{$this->childNodeName})) {
return $properties; return $properties;
} }
foreach ($xmlNode->{$this->childNodeName} as $childNode) { foreach ($xmlNode->{$this->childNodeName} as $childNode) {
$childProperties = $this->childNodeStructure->parseXml($childNode); $childProperties = $this->childNodeStructure->parseXml($childNode);
$properties->push($childProperties); $properties->add($childProperties);
} }
return $properties; return $properties;
} }

@ -2,7 +2,7 @@
namespace jrosset\EnvReader\XmlStructure; namespace jrosset\EnvReader\XmlStructure;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
@ -33,9 +33,9 @@ trait TAttributeListXmlStructure {
* *
* @return mixed The extracted attributes * @return mixed The extracted attributes
*/ */
protected function parseXmlAttributes (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { protected function parseXmlAttributes (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection {
if ($this->attributesStructure === null) { if ($this->attributesStructure === null) {
return new InsensitiveCaseArrayClass(); return new InsensitiveCaseKeyCollection();
} }
return $this->attributesStructure->parseXml($xmlNode); return $this->attributesStructure->parseXml($xmlNode);

@ -2,7 +2,7 @@
namespace jrosset\EnvReader\XmlStructure; namespace jrosset\EnvReader\XmlStructure;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass; use jrosset\Collections\InsensitiveCaseKeyCollection;
use SimpleXMLElement; use SimpleXMLElement;
/** /**
@ -34,7 +34,7 @@ class TextAndAttributesXmlStructure implements IXmlStructure {
/** /**
* @inheritDoc * @inheritDoc
*/ */
public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseArrayClass { public function parseXml (SimpleXMLElement $xmlNode): InsensitiveCaseKeyCollection {
$properties = $this->parseXmlAttributes($xmlNode); $properties = $this->parseXmlAttributes($xmlNode);
$properties->set($this->textPropertyName, $this->textXmlStructure->parseXml($xmlNode)); $properties->set($this->textPropertyName, $this->textXmlStructure->parseXml($xmlNode));
return $properties; return $properties;

Loading…
Cancel
Save