Improved detection of collections (affected on -f and -d)
This commit is contained in:
parent
9613697ada
commit
1b3dd8b677
@ -10,8 +10,17 @@ use PmConverter\Exceptions\{
|
|||||||
DirectoryIsNotWriteableException,
|
DirectoryIsNotWriteableException,
|
||||||
DirectoryNotExistsException};
|
DirectoryNotExistsException};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper class to work with files and directories
|
||||||
|
*/
|
||||||
class FileSystem
|
class FileSystem
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* Normalizes a given path
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
public static function normalizePath(string $path): string
|
public static function normalizePath(string $path): string
|
||||||
{
|
{
|
||||||
$path = str_replace('~', $_SERVER['HOME'], $path);
|
$path = str_replace('~', $_SERVER['HOME'], $path);
|
||||||
@ -19,6 +28,8 @@ class FileSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Recursively creates a new directory by given path
|
||||||
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return string
|
* @return string
|
||||||
* @throws CannotCreateDirectoryException
|
* @throws CannotCreateDirectoryException
|
||||||
@ -38,6 +49,8 @@ class FileSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Recursively removes a given directory
|
||||||
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return void
|
* @return void
|
||||||
* @throws DirectoryIsNotReadableException
|
* @throws DirectoryIsNotReadableException
|
||||||
@ -77,11 +90,10 @@ class FileSystem
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* Returns content of given directory path
|
||||||
|
*
|
||||||
* @param string $path
|
* @param string $path
|
||||||
* @return array
|
* @return array
|
||||||
* @throws DirectoryIsNotReadableException
|
|
||||||
* @throws DirectoryIsNotWriteableException
|
|
||||||
* @throws DirectoryNotExistsException
|
|
||||||
*/
|
*/
|
||||||
public static function dirContents(string $path): array
|
public static function dirContents(string $path): array
|
||||||
{
|
{
|
||||||
@ -92,4 +104,22 @@ class FileSystem
|
|||||||
}
|
}
|
||||||
return $records;
|
return $records;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks if a given file is a valid collection json file
|
||||||
|
*
|
||||||
|
* @param string $path
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
|
public static function isCollectionFile(string $path): bool
|
||||||
|
{
|
||||||
|
$path = static::normalizePath($path);
|
||||||
|
return !empty($path = trim($path))
|
||||||
|
&& str_ends_with($path, '.postman_collection.json')
|
||||||
|
&& file_exists($path)
|
||||||
|
&& is_readable($path)
|
||||||
|
&& ($json = json_decode(file_get_contents($path), true))
|
||||||
|
&& json_last_error() === JSON_ERROR_NONE
|
||||||
|
&& isset($json['collection']['info']['name']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -92,47 +92,58 @@ class Processor
|
|||||||
switch ($arg) {
|
switch ($arg) {
|
||||||
case '-f':
|
case '-f':
|
||||||
case '--file':
|
case '--file':
|
||||||
$path = FileSystem::normalizePath($this->argv[$idx + 1]);
|
$rawpath = $this->argv[$idx + 1];
|
||||||
if (empty($path) || !str_ends_with($path, '.json') || !file_exists($path) || !is_readable($path)) {
|
$normpath = FileSystem::normalizePath($rawpath);
|
||||||
throw new InvalidArgumentException('a valid json-file path is expected for -f (--file)');
|
if (!FileSystem::isCollectionFile($normpath)) {
|
||||||
|
throw new InvalidArgumentException(
|
||||||
|
sprintf("this is not a valid collection file:%s\t%s %s", PHP_EOL, $arg, $rawpath)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
$this->collectionPaths[] = $this->argv[$idx + 1];
|
$this->collectionPaths[] = $this->argv[$idx + 1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '-o':
|
case '-o':
|
||||||
case '--output':
|
case '--output':
|
||||||
if (empty($this->argv[$idx + 1])) {
|
if (empty($this->argv[$idx + 1])) {
|
||||||
throw new InvalidArgumentException('-o expected');
|
throw new InvalidArgumentException('-o is required');
|
||||||
}
|
}
|
||||||
$this->outputPath = $this->argv[$idx + 1];
|
$this->outputPath = $this->argv[$idx + 1];
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '-d':
|
case '-d':
|
||||||
case '--dir':
|
case '--dir':
|
||||||
if (empty($this->argv[$idx + 1])) {
|
if (empty($this->argv[$idx + 1])) {
|
||||||
throw new InvalidArgumentException('a directory path is expected for -d (--dir)');
|
throw new InvalidArgumentException('a directory path is expected for -d (--dir)');
|
||||||
}
|
}
|
||||||
$path = $this->argv[$idx + 1];
|
$normpath = $this->argv[$idx + 1];
|
||||||
$files = array_filter(
|
$files = array_filter(
|
||||||
FileSystem::dirContents($path),
|
FileSystem::dirContents($normpath),
|
||||||
static fn($filename) => str_ends_with($filename, '.json')
|
static fn($filename) => FileSystem::isCollectionFile($filename)
|
||||||
);
|
);
|
||||||
$this->collectionPaths = array_unique(array_merge($this?->collectionPaths ?? [], $files));
|
$this->collectionPaths = array_unique(array_merge($this?->collectionPaths ?? [], $files));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '-p':
|
case '-p':
|
||||||
case '--preserve':
|
case '--preserve':
|
||||||
$this->preserveOutput = true;
|
$this->preserveOutput = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '--http':
|
case '--http':
|
||||||
$this->formats[ConvertFormat::Http->name] = ConvertFormat::Http;
|
$this->formats[ConvertFormat::Http->name] = ConvertFormat::Http;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '--curl':
|
case '--curl':
|
||||||
$this->formats[ConvertFormat::Curl->name] = ConvertFormat::Curl;
|
$this->formats[ConvertFormat::Curl->name] = ConvertFormat::Curl;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '--wget':
|
case '--wget':
|
||||||
$this->formats[ConvertFormat::Wget->name] = ConvertFormat::Wget;
|
$this->formats[ConvertFormat::Wget->name] = ConvertFormat::Wget;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '-v':
|
case '-v':
|
||||||
case '--version':
|
case '--version':
|
||||||
die(implode(PHP_EOL, $this->version()) . PHP_EOL);
|
die(implode(PHP_EOL, $this->version()) . PHP_EOL);
|
||||||
|
|
||||||
case '-h':
|
case '-h':
|
||||||
case '--help':
|
case '--help':
|
||||||
die(implode(PHP_EOL, $this->usage()) . PHP_EOL);
|
die(implode(PHP_EOL, $this->usage()) . PHP_EOL);
|
||||||
|
Loading…
Reference in New Issue
Block a user