File finder API the OOP way
This is still a WIP repository.
The best way to use this package is through Composer:
composer require italystrap/finder
This package adheres to the SemVer specification and will be fully backward compatible between minor versions.
Given a list of file name
And a list of directories to search on
When I search a file
Then the first available file is returned
Basic example
files
$list_of_file = [
'file-specialized.php',
'file.php',
];
directories
$dirs = [
'my/theme/child/template', // First dir to search the file
'my/theme/parent/template', // Second dir to search the file
];
If file-specialized.php
exists in one of the given directories it will return the name and full path of the file.
my/theme/child/template/file-specialized.php
or
my/theme/parent/template/file-specialized.php
If the file-specialized.php
is not found then will search for file.php
and return full path if exists
my/theme/child/template/file.php
or
my/theme/parent/template/file.php
If no file.php
is founded it will throw an error message.
real code example
use ItalyStrap\Finder\Finder;
use ItalyStrap\Finder\FilesHierarchyIterator;
use ItalyStrap\Finder\FileInfoFactory;
use ItalyStrap\Finder\FinderFactory;
$dirs = [
'my/theme/child/template', // First dir to search the file
'my/theme/parent/template', // Second dir to search the file
];
$find = new Finder( new FilesHierarchyIterator( new FileInfoFactory() ) );
//or
$find = ( new FinderFactory() )->make();
$find->in( $dirs );
// Will search for:
// my/theme/child/template/file-specialized.php
// my/theme/child/template/file.php
// my/theme/parent/template/file-specialized.php
// my/theme/parent/template/file.php
/**
* @var \SplFileInfo $files_found
*/
$file_found = $find->firstFile(['file', 'specialized'], 'php', '-');
Given a list of file name
And a list of directories to search on
When I search an asset file
Then the file with highest priority file is returned
Basic example
files
$min = \defined( 'WP_DEBUG' ) && WP_DEBUG ? '.min' : '';
$list_of_file = [
'style' . $min . '.css',
];
directories
$dirs = [
'my/theme/child/asset/css', // First dir to search the file
'my/theme/parent/asset/css', // Second dir to search the file
];
If style
exists in one of the given directories it will return the name and full path of the file from the directory with highest priority
my/theme/child/asset/css/style.css
If the style.css
is not found in the child directory then will search in parent directory and return full path if exists
my/theme/parent/asset/css/style.css
If no style.css
is founded it will throw an error message.
real code example
use ItalyStrap\Finder\Finder;
use ItalyStrap\Finder\FilesHierarchyIterator;
use ItalyStrap\Finder\FileInfoFactory;
use ItalyStrap\Finder\FinderFactory;
$min = \defined( 'WP_DEBUG' ) && WP_DEBUG ? '.min' : '';
$dirs = [
'my/theme/child/asset/css', // First dir to search the file
'my/theme/parent/asset/css', // Second dir to search the file
];
$find = new Finder( new FilesHierarchyIterator( new FileInfoFactory() ) );
//or
$find = ( new FinderFactory() )->make();
$find->in( $dirs );
// Will search for:
// my/theme/child/asset/css/style.min.css
// my/theme/child/asset/css/style.css
// my/theme/parent/asset/css/style.min.css
// my/theme/parent/asset/css/style.css
/**
* @var \SplFileInfo $files_found
*/
$file_found = $find->firstFile(['style', $min], 'css', '.');
Given a name of a config file
And a list of directories to search on
When I search the config files
Then The list of all file with the same name founded are returned sorted
Basic example
files
$list_of_file = [
'config.php',
];
directories
$dirs = [
'my/theme/child/config', // First dir to search the file
'my/theme/parent/config', // Second dir to search the file
];
If config.php
exists in one or all of the given directories it will return the name and full path of the files from the directory
my/theme/child/config/config.php
my/theme/parent/config/config.php
If no config.php
is founded it will throw an error message.
real code example
use ItalyStrap\Finder\Finder;
use ItalyStrap\Finder\FilesHierarchyIterator;
use ItalyStrap\Finder\FileInfoFactory;
use ItalyStrap\Finder\FinderFactory;
$dirs = [
'my/theme/child/config', // First dir to search the file
'my/theme/parent/config', // Second dir to search the file
];
$find = new Finder( new FilesHierarchyIterator( new FileInfoFactory() ) );
//or
$find = ( new FinderFactory() )->make();
$find->in( $dirs );
// Will search for:
// my/theme/child/config/config.php
// my/theme/parent/config/config.php
/**
* @var array<\SplFileInfo> $files_found
*/
$files_found = $find->allFiles(['config'], 'php', '-');
All feedback / bug reports / pull requests are welcome.
Copyright (c) 2019 Enea Overclokk, ItalyStrap
This code is licensed under the MIT.