public static function fromFile(string $propertiesFile): self
    {
        if (!file_exists($propertiesFile) || !is_readable($propertiesFile)) {
            throw new \InvalidArgumentException(
                    'Property file ' . $propertiesFile . ' not found'
            );
        }

        $propertyData = @parse_ini_file($propertiesFile, true);
        if (false === $propertyData) {
            throw new \UnexpectedValueException(
                    'Property file at ' . $propertiesFile
                    . ' contains errors and can not be parsed: '
                    . lastErrorMessage()->value()
            );
        }

        return new static($propertyData);
    }