- \ncc\Objects\ProjectConfiguration > Compiler
: Added Public Constructor to automatically determine the minimum and
maximum supported compiler version for the selected extension - `\ncc\Objects\ProjectConfiguration > Compiler > fromArray()` throws an ConfigurationException if the property `extension` is null - `\ncc\Objects\ProjectConfiguration > Compiler > fromArray()` throws an NotSupportedException if the `extension` uses an unsupported compiler extension - `\ncc\Objects\ProjectConfiguration > Compiler > validate()` No longer accepts `$throw_exception` and throws an `ConfigurationException` or `NotSupportedException` if the validation fails, otherwise it returns `True`. - `\ncc\Objects\ProjectConfiguration > Project > fromArray()` Throws an `ConfigurationException` if the property `compiler` is missing in the project configuration - `\ncc\Objects > ProjectConfiguration > fromArray()` Throws an `ConfigurationException` if the property 'project' is missing in the root configuration - `\ncc\Objects\ProjectConfiguration > Project > __construct()` now requires the parameter `$compiler` - Removed parameter `$throw_exception` from `\ncc\Objects\ProjectConfiguration > Project > validate()`
This commit is contained in:
parent
99bdd933cd
commit
230675c586
6 changed files with 119 additions and 72 deletions
13
CHANGELOG.md
13
CHANGELOG.md
|
@ -199,6 +199,18 @@ features and reduced the number of exceptions down to 15 exceptions.
|
|||
- Updated class `\ncc\Objects > RemotePackageInput` to use method calls rather than direct property access
|
||||
- Updated class `\ncc\Objects > RepositoryQueryResults` to use method calls rather than direct property access
|
||||
- Updated class `\ncc\Objects > Vault` to use method calls rather than direct property access
|
||||
- `\ncc\Objects\ProjectConfiguration > Compiler`: Added Public Constructor to automatically determine the minimum and
|
||||
maximum supported compiler version for the selected extension
|
||||
- `\ncc\Objects\ProjectConfiguration > Compiler > fromArray()` throws an ConfigurationException if the property `extension` is null
|
||||
- `\ncc\Objects\ProjectConfiguration > Compiler > fromArray()` throws an NotSupportedException if the `extension` uses an
|
||||
unsupported compiler extension
|
||||
- `\ncc\Objects\ProjectConfiguration > Compiler > validate()` No longer accepts `$throw_exception` and throws an
|
||||
`ConfigurationException` or `NotSupportedException` if the validation fails, otherwise it returns `True`.
|
||||
- `\ncc\Objects\ProjectConfiguration > Project > fromArray()` Throws an `ConfigurationException` if the property `compiler`
|
||||
is missing in the project configuration
|
||||
- `\ncc\Objects > ProjectConfiguration > fromArray()` Throws an `ConfigurationException` if the property 'project' is
|
||||
missing in the root configuration
|
||||
- `\ncc\Objects\ProjectConfiguration > Project > __construct()` now requires the parameter `$compiler`
|
||||
|
||||
|
||||
### Removed
|
||||
|
@ -261,6 +273,7 @@ features and reduced the number of exceptions down to 15 exceptions.
|
|||
- Removed unused `scope` property from `\ncc\Objects\ProjectConfiguration > Build`
|
||||
- Removed unused `\ncc\Objects > NccUpdateInformation`
|
||||
- Removed unused `\ncc\Objects > PhpConfiguration`
|
||||
- Removed parameter `$throw_exception` from `\ncc\Objects\ProjectConfiguration > Project > validate()`
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -208,15 +208,14 @@
|
|||
* Attempts to load the project configuration
|
||||
*
|
||||
* @return void
|
||||
* @throws ConfigurationException
|
||||
* @throws IOException
|
||||
* @throws PathNotFoundException
|
||||
*/
|
||||
public function load(): void
|
||||
{
|
||||
if(!file_exists($this->project_file_path) && !is_file($this->project_file_path))
|
||||
if(!is_file($this->project_file_path))
|
||||
{
|
||||
throw new ConfigurationException('The project configuration file \'' . $this->project_file_path . '\' was not found');
|
||||
throw new PathNotFoundException($this->project_file_path);
|
||||
}
|
||||
|
||||
$this->project_configuration = ProjectConfiguration::fromFile($this->project_file_path);
|
||||
|
|
|
@ -551,6 +551,10 @@
|
|||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param array $data
|
||||
* @return ProjectConfiguration
|
||||
* @throws ConfigurationException
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public static function fromArray(array $data): ProjectConfiguration
|
||||
{
|
||||
|
@ -561,6 +565,10 @@
|
|||
{
|
||||
$object->project = Project::fromArray($object->project);
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ConfigurationException('The project configuration is missing the required property "project" in the root of the configuration');
|
||||
}
|
||||
|
||||
$object->assembly = Functions::array_bc($data, 'assembly');
|
||||
if($object->assembly !== null)
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* Copyright (c) Nosial 2022-2023, all rights reserved.
|
||||
*
|
||||
|
@ -20,6 +21,7 @@
|
|||
*
|
||||
*/
|
||||
|
||||
/** @noinspection PhpUnused */
|
||||
/** @noinspection PhpMissingFieldTypeInspection */
|
||||
|
||||
namespace ncc\Objects\ProjectConfiguration;
|
||||
|
@ -60,6 +62,44 @@
|
|||
*/
|
||||
private $maximum_version;
|
||||
|
||||
/**
|
||||
* Compiler constructor.
|
||||
*
|
||||
* @param string $extension
|
||||
* @param string|null $minimum_version
|
||||
* @param string|null $maximum_version
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public function __construct(string $extension, ?string $minimum_version=null, ?string $maximum_version=null)
|
||||
{
|
||||
$extension = strtolower($extension);
|
||||
|
||||
/** @noinspection DegradedSwitchInspection */
|
||||
switch($extension)
|
||||
{
|
||||
case CompilerExtensions::PHP:
|
||||
|
||||
if($minimum_version === null)
|
||||
{
|
||||
$minimum_version = CompilerExtensionSupportedVersions::PHP[0];
|
||||
}
|
||||
|
||||
if($maximum_version === null)
|
||||
{
|
||||
$maximum_version = CompilerExtensionSupportedVersions::PHP[count(CompilerExtensionSupportedVersions::PHP) - 1];
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException(sprintf('The compiler extension \'%s\' is not supported in ncc', $extension));
|
||||
}
|
||||
|
||||
$this->extension = $extension;
|
||||
$this->minimum_version = $minimum_version;
|
||||
$this->maximum_version = $maximum_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
|
@ -111,53 +151,32 @@
|
|||
/**
|
||||
* Validates the compiler object
|
||||
*
|
||||
* @param bool $throw_exception
|
||||
* @return bool
|
||||
* @throws ConfigurationException
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public function validate(bool $throw_exception=True): bool
|
||||
public function validate(): bool
|
||||
{
|
||||
if($this->extension === null)
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new ConfigurationException('The property \'extension\' must not be null.');
|
||||
}
|
||||
|
||||
return False;
|
||||
throw new ConfigurationException('The property \'extension\' must not be null.');
|
||||
}
|
||||
|
||||
if($this->minimum_version === null)
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new ConfigurationException('The property \'minimum_version\' must not be null.');
|
||||
}
|
||||
|
||||
return False;
|
||||
throw new ConfigurationException('The property \'minimum_version\' must not be null.');
|
||||
}
|
||||
|
||||
if($this->maximum_version === null)
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new ConfigurationException('The property \'maximum_version\' must not be null.');
|
||||
}
|
||||
|
||||
return False;
|
||||
throw new ConfigurationException('The property \'maximum_version\' must not be null.');
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if(VersionComparator::compareVersion($this->minimum_version, $this->maximum_version) === 1)
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new ConfigurationException('The minimum version cannot be greater version number than the maximum version');
|
||||
}
|
||||
|
||||
return False;
|
||||
throw new ConfigurationException('The minimum version cannot be greater version number than the maximum version');
|
||||
}
|
||||
}
|
||||
catch (Exception $e)
|
||||
|
@ -165,40 +184,32 @@
|
|||
throw new ConfigurationException('Version comparison failed: ' . $e->getMessage());
|
||||
}
|
||||
|
||||
if(!in_array($this->extension, CompilerExtensions::ALL))
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new NotSupportedException('The compiler extension \'' . $this->extension . '\' is not supported');
|
||||
}
|
||||
|
||||
return False;
|
||||
}
|
||||
/** @noinspection InArrayMissUseInspection */
|
||||
if(!in_array($this->extension, CompilerExtensions::ALL, true))
|
||||
{
|
||||
throw new NotSupportedException('The compiler extension \'' . $this->extension . '\' is not supported');
|
||||
}
|
||||
|
||||
/** @noinspection DegradedSwitchInspection */
|
||||
switch($this->extension)
|
||||
{
|
||||
case CompilerExtensions::PHP:
|
||||
if(!in_array($this->maximum_version, CompilerExtensionSupportedVersions::PHP))
|
||||
|
||||
if(!in_array($this->maximum_version, CompilerExtensionSupportedVersions::PHP, true))
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new NotSupportedException('The MaximumVersion does not support version ' . $this->maximum_version . ' for the extension ' . $this->extension);
|
||||
}
|
||||
return False;
|
||||
throw new NotSupportedException('The property "project.compiler.maximum_version" does not support version ' . $this->maximum_version . ' for the extension ' . $this->extension);
|
||||
|
||||
}
|
||||
|
||||
if(!in_array($this->minimum_version, CompilerExtensionSupportedVersions::PHP))
|
||||
if(!in_array($this->minimum_version, CompilerExtensionSupportedVersions::PHP, true))
|
||||
{
|
||||
if($throw_exception)
|
||||
{
|
||||
throw new NotSupportedException('The MinimumVersion does not support version ' . $this->minimum_version . ' for the extension ' . $this->extension);
|
||||
}
|
||||
return False;
|
||||
throw new NotSupportedException('The property "project.compiler.minimum_version" does not support version ' . $this->minimum_version . ' for the extension ' . $this->extension);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
throw new NotSupportedException('The compiler extension \'' . $this->extension . '\' is not supported');
|
||||
throw new NotSupportedException('The compiler extension "' . $this->extension . '" is not supported by ncc');
|
||||
}
|
||||
|
||||
return True;
|
||||
|
@ -230,15 +241,21 @@
|
|||
|
||||
/**
|
||||
* @inheritDoc
|
||||
* @param array $data
|
||||
* @return Compiler
|
||||
* @throws ConfigurationException
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public static function fromArray(array $data): Compiler
|
||||
{
|
||||
$object = new self();
|
||||
if(Functions::array_bc($data, 'extension') === null)
|
||||
{
|
||||
throw new ConfigurationException('The property \'project.compiler.extension\' must not be null.');
|
||||
}
|
||||
|
||||
$object->maximum_version = Functions::array_bc($data, 'maximum_version');
|
||||
$object->extension = Functions::array_bc($data, 'extension');
|
||||
$object->minimum_version = Functions::array_bc($data, 'minimum_version');
|
||||
|
||||
return $object;
|
||||
return new self(Functions::array_bc($data, 'extension'),
|
||||
Functions::array_bc($data, 'maximum_version'),
|
||||
Functions::array_bc($data, 'minimum_version')
|
||||
);
|
||||
}
|
||||
}
|
|
@ -53,9 +53,9 @@
|
|||
/**
|
||||
* Public Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
public function __construct(Compiler $compiler)
|
||||
{
|
||||
$this->compiler = new Compiler();
|
||||
$this->compiler = $compiler;
|
||||
$this->options = [];
|
||||
}
|
||||
|
||||
|
@ -129,17 +129,13 @@
|
|||
/**
|
||||
* Validates the Project object
|
||||
*
|
||||
* @param bool $throw_exception
|
||||
* @return bool
|
||||
* @throws ConfigurationException
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public function validate(bool $throw_exception=True): bool
|
||||
public function validate(): bool
|
||||
{
|
||||
if(!$this->compiler->validate($throw_exception))
|
||||
{
|
||||
return False;
|
||||
}
|
||||
$this->compiler->validate();
|
||||
|
||||
return True;
|
||||
}
|
||||
|
@ -170,22 +166,28 @@
|
|||
*
|
||||
* @param array $data
|
||||
* @return Project
|
||||
* @throws ConfigurationException
|
||||
* @throws NotSupportedException
|
||||
*/
|
||||
public static function fromArray(array $data): Project
|
||||
{
|
||||
$object = new self();
|
||||
|
||||
if(Functions::array_bc($data, 'compiler') !== null)
|
||||
{
|
||||
$object->compiler = Compiler::fromArray(Functions::array_bc($data, 'compiler'));
|
||||
$object = new self(Compiler::fromArray(Functions::array_bc($data, 'compiler')));
|
||||
}
|
||||
|
||||
if(Functions::array_bc($data, 'options') !== null)
|
||||
else
|
||||
{
|
||||
$object->options = Functions::array_bc($data, 'options');
|
||||
throw new ConfigurationException('The project configuration is missing the required property "compiler" in the project section.');
|
||||
}
|
||||
|
||||
if(Functions::array_bc($data, 'update_source') !== null)
|
||||
$object->options = Functions::array_bc($data, 'options');
|
||||
if($object->options === null)
|
||||
{
|
||||
$object->options = [];
|
||||
}
|
||||
|
||||
$object->update_source = Functions::array_bc($data, 'update_source');
|
||||
if($object->update_source !== null)
|
||||
{
|
||||
$object->update_source = UpdateSource::fromArray(Functions::array_bc($data, 'update_source'));
|
||||
}
|
||||
|
|
8
tests/projects/php_cli/project.json
Normal file
8
tests/projects/php_cli/project.json
Normal file
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"project": {
|
||||
"compiler": {
|
||||
"extension": "php",
|
||||
"minimum_version": "8.0"
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Reference in a new issue