Skip to content

wemakecustom/composer-script-utils

Repository files navigation

Composer Script Utils

Set of tools for Composer scripts

Build Status

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+

About

Set of tools for Composer scripts

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages