, (*1)
composer-hydration
Introduction
composer-hydration is a simple package that provides a Composer Script to be used as placeholder replacement, mostly used by 'skeletons' projects., (*2)
Example:, (*3)
composer run-script hydrate -- --replace={FRUIT}:"apple",{INGREDIENT}:"cinnamon"
The script will search for the placeholders in file content, file names and folders., (*4)
Before:, (*5)
$ /path/composer/project/{FRUIT}.txt
"I love {FRUIT} with {INGREDIENT}, is a good combination!"
After:, (*6)
$ /path/composer/project/apple.txt
"I love apple with cinnamon, is a good combination!"
Installation
Install Composer
Since composer-hydration is a Composer script, you need to install composer first., (*7)
Note: The instructions below refer to the global composer installation.
You might need to replace composer with php composer.phar (or similar)
for your setup., (*8)
Add package dependency
Add composer-hydration as package dependency of your project, updating your composer.json:, (*9)
"require": {
...
"jkribeiro/composer-hydration": "~1"
}
Define the Composer Script
Define the Composer script, adding this entry to your composer.json:, (*10)
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones"
}
Install Project
composer install
Usage
There are some ways that you can execute this script:, (*11)
Execute the command manually
After have the package installed, you can run the command manually to have your values placed., (*12)
composer run-script hydrate -- --replace={SEARCH}:{REPLACE},..."
Hydrate during the Composer Events
Composer fires some events during its execution process, useful to define on which step/event it will perform the hydration process., (*13)
In the example below, the hydration process will occur after the project installation:, (*14)
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones",
"post-install-cmd": "@composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:{%BASENAME%}"
}
Variables as Replacement values
Sometimes we need to use dynamic replacement values on composer.json, not only hardcoded values like {FRUIT}:banana, for these cases, there are two possibilities:, (*15)
Environment Variables
composer.json allows environment variables as replacement placeholder value, like {{PROJECT_NAMESPACE}}:$PROJECT_NAME", $PROJECT_NAME is the variable name. You must define the variables before execute the Composer commands., (*16)
Example:
composer.json, (*17)
...
"scripts": {
"hydrate": "Jkribeiro\\Composer\\ComposerHydration::meatOnBones",
"post-install-cmd": "@composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:$PROJECT_NAME"
}
Execution, (*18)
$ export PROJECT_NAME="My Project"
$ composer install
"Magic Constants"
Using the same idea of PHP Magic constants, composer-hydration provides some Magic constants too., (*19)
-
{%BASENAME%}: Returns the base folder name where the script is being executed, normally is the name of the project.
-
{%UCFIRST_BASENAME%}: Returns the base folder name with the first character capitalized.
-
{%UPPER_CAMEL_CASE_BASENAME%}, {%LOWER_CAMEL_CASE_BASENAME%}: Returns the base folder name using the upper/lower camel case format. Only the folder name separators '-', '_' are allowed., (*20)
Example:, (*21)
$ ~/Projects/myproject: composer run-script hydrate -- --replace={{PROJECT_NAMESPACE}}:{%BASENAME%}"
Placeholders with {{PROJECT_NAMESPACE}} will be replaced by myproject., (*22)