arandu / reducible
Reducible pattern as a trait
v1.0.0
2024-03-08 01:23 UTC
Requires
- php: ^8.1
Requires (Dev)
- phpunit/phpunit: ^10.5
README
A trait to make your classes customizable via a set of reducers.
Installation
composer require arandu/reducible
Usage
use Arandu\Reducible\Reducible; class MyClass { use Reducible; public function callApi($url, $options) { // will call all reducers for the method name $options = $this->transformCallApiOptions($options); // ... } } // ----- // Register a 'transformCallApiOptions' reducer MyClass::reducer('transformCallApiOptions', function ($options) { return [ ...$options, 'headers' => [ ...($options['headers'] ?? []), 'Authorization' => 'Bearer ' . $this->token, ], ]; }); // Multiple reducers can be added MyClass::reducer('transformCallApiOptions', function ($options) { return [ ...$options, 'headers' => [ ...($options['headers'] ?? []), 'X-Api-Key' => $this->apiKey, ], ]; }); // ----- $myClass = new MyClass(); $myClass->callApi('https://api.example.com', [ 'headers' => [ 'Content-Type' => 'application/json', ], ]); // The callApi method will be called with the following options: // [ // 'headers' => [ // 'Content-Type' => 'application/json', // 'Authorization' => 'Bearer ' . $myClass->token, // 'X-Api-Key' => $myClass->apiKey, // ], // ]
Advanced Usage
Read the Advanced Usage documentation.
License
This package is open-sourced software licensed under the MIT license.
Testing
composer test