Use of jrosset/collections 2.*

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

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

@ -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*(?<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);
}
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*(?<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);
}
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;

@ -3,7 +3,7 @@
namespace jrosset\EnvReader;
use Exception;
use jrosset\ArrayClasses\InsensitiveCaseArrayClass;
use jrosset\Collections\InsensitiveCaseKeyCollection;
/**
* A INI file configuration class
@ -29,14 +29,14 @@ 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 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;
}

@ -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);
}
}

@ -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;
}

@ -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)
);
}

@ -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;
}

@ -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);

@ -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;

Loading…
Cancel
Save