Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/eckinox/eckinox-installer-plugin

A simple Composer plugin to install metapackages with extra files and configurations.
https://github.com/eckinox/eckinox-installer-plugin

Last synced: 8 days ago
JSON representation

A simple Composer plugin to install metapackages with extra files and configurations.

Awesome Lists containing this project

README

        

# Composer installer plugin handling file replication

![CI](https://github.com/eckinox/eckinox-installer-plugin/workflows/CI/badge.svg)

A simple Composer plugin to install (meta)packages with extra files and configurations.

## Usage
To get started, simply require this plugin in your project using:

```bash
composer require --dev eckinox/installer-plugin
```

Once that's done, you can require any Composer package with the `eckinox-metapackage` type.

### Creating `eckinox-metapackage` packages
Eckinox metapackages are the same as all regular packages, with one exception: they can include a `replicate` directory at their root.

Whenever a package of that type is installed, every file and directory in the package's `replicate` directory will be replicated as-is in the project's directory.

If a directory in the `replicate` directory already exists in the project, its files will simply be appended to the existing directory. The original won't be deleted.
However, existing files in the project _will_ be overwritten if they have the same name as another file in the package's `replicate` directory.

#### Adding custom logic via Handlers
If you need to add extra logic and processing during the replication process, you can create an handler class in your package.

Handler classes extend the `Eckinox\Composer\HandlerInterface`, and must be declared in the package's `composer.json` file as such:
```json
...
"extra": {
"class": "Eckinox\\PackageName\\YourHandler"
},
...
```

Your handler class must define the following methods:
- `postFileCreationCallback`: Defines what happens when after a file has first been created in the root project.
- `handleExistingFile`: Defines what happens when a file to replicate already exists in the root project.

Here is a example of a very basic handler class that simply renames a `rename-me.txt` file to `renamed.txt` when it is first replicated in the main project.
```php