wemakecustom / composer-script-utils
Set of tools for Composer scripts
Installs: 1 699
Dependents: 2
Suggesters: 1
Security: 0
Stars: 7
Watchers: 8
Forks: 1
Open Issues: 0
pkg:composer/wemakecustom/composer-script-utils
Requires (Dev)
- composer/composer: dev-master
- composer/composer: dev-master
- knplabs/gaufrette: ^0.2.1
Suggests
- symfony/yaml: Enables yaml parsing
README
Set of tools for Composer scripts
Documentation
PackageLocator::getPackagePath
Retrieve the full install path of a package
<?php use Composer\Script\Event; use WMC\Composer\Utils\Composer\PackageLocator; class ScriptHandler { public static function myHandler(Event $event) { $directory = PackageLocator::getPackagePath($event->getComposer(), 'composer/composer'); } } ?>
PathUtil::getRelativePath
Short relative path from a file/folder to a file/folder
<?php use WMC\Composer\Utils\Filesystem\PathUtil; $relPath = PathUtil::getRelativePath('/tmp/foo/bar', '/tmp/baz'); // ../foo/bar ?>
ConfigFile
Asks interactively for values to fill a configuration file Values asked are taken from a dist file where its values are used are default values
Ex: ask for database configuration with:
; database.dist.ini user=root pass=root name=my_database host=localhost
By default, it with read values from environment, using the filename as a prefix. Ex: DATABASE_USER
You can override this by specifying a custom environment map using setEnvMap(array('field' => 'ENV'))
By default, it will flush outdated parameters (present in the config file, but not in the dist file).
You can override this with setKeepOutdatedParams.
Supported formats
Currently, json, ini, yml and yaml files are supported.
For command-line input, json_decode will be used, but strings do not need to be quoted.
Different formats for dist/target files
It is possible to have a dist file in one format and output a target file in another by concatenating the extensions. This could be use to generate default values in a PHP script, but still save it as another format.
Ex:
<?php // dist/foo.ini.php return array('foo' => 'bar'); ?>
; local/foo.ini foo=bar
Default Composer script
If you want to use the default configuration without any custom mapping, you can use the included Composer script:
Each file in path/to/dist/dir will be compiled to path/to/target/dir.
{
"scripts": {
"post-install-cmd": [
"WMC\\Composer\\Utils\\ScriptHandler::updateDirs"
],
"post-update-cmd": [
"WMC\\Composer\\Utils\\ScriptHandler::updateDirs"
]
},
"extra": {
"update-config-dirs": {
"path/to/dist/dir": "path/to/target/dir"
}
}
}
Custom handling
For more control, use the FileUpdater directly:
<?php use Composer\Script\Event; use WMC\Composer\Utils\ScriptHandler as Base; class ScriptHandler { public static function myHandler(Event $event) { $configFile = Base::createConfigFileUpdate($event->getIO()); $configFile->updateFile('database.ini', 'database.ini.dist'); } } ?>
N.B.: If you want to save your dist files along with your targets (For example,
a parameters.yml.dist with the parameters.yml), you will need to use Custom
Handling.
Author
Notes
Tested on PHP 5.3+