decodelabs/fluidity

Tools for creating fluent interfaces

v0.3.4 2023-09-26 09:13 UTC

This package is auto-updated.

Last update: 2024-04-06 23:29:50 UTC


README

PHP from Packagist Latest Version Total Downloads GitHub Workflow Status PHPStan License

Tools for creating fluent interfaces.

Fluidity provides a set of middleware interfaces that aid in the development of libraries that themselves aim to provide fluid interfaces.

Get news and updates on the DecodeLabs blog.

Installation

Install via Composer:

composer require decodelabs/fluidity

Usage

Method chaining

namespace DecodeLabs\Fluidity;

interface Then
{
    public function then(callable $callback): Then;
    public function thenEach(iterable $values, callable $callback): Then;
    public function thenIf(?bool $truth, callable $yes, callable $no=null): Then;
    public function thenUnless(?bool $truth, callable $no, callable $yes=null): Then;
}

Create fluent object interfaces with basic generic logic structure support.

use DecodeLabs\Fluidity\Then;
use DecodeLabs\Fluidity\ThenTrait;

$test = new class() implements Then {
    use ThenTrait;

    public function doThing(int $value=null) {}
};

$truth = true;

$test
    ->then(function($test) {
        $test->doThing();
    })

    ->thenEach([1, 2, 3], function($test, $value) {
        // Called three times
        $test->doThing($value);
    })

    ->thenIf($truth, function($test) {
        // This gets called if($truth)
    }, function($test) {
        // This get called otherwise
    })

    ->thenUnless($truth, function($test) {
        // This gets called if(!$truth)
    }, function($test) {
        // This get called otherwise
    });

Licensing

Fluidity is licensed under the MIT License. See LICENSE for the full license text.