2017 © Pedro Peláez
 

library compose-mixins

Customizable function composition for PHP.

image

reasno/compose-mixins

Customizable function composition for PHP.

  • Friday, June 15, 2018
  • by Reasno
  • Repository
  • 2 Watchers
  • 10 Stars
  • 2 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 1 Forks
  • 0 Open issues
  • 7 Versions
  • 0 % Grown

The README.md

ComposeMixins

ComposeMixins is a tiny but extendable PHP library for function composition., (*1)

Installation

# in your project root
composer require reasno/compose-mixins

Examples

use function Reasno\Helpers\composeMixins;
use Reasno\Helpers\Recipe;

$c = composeMixins(new Recipe('pipe'), /* callable */ $a, /* callable */ $b);
$result = $c($input); //Use the composed function

$c becomes a composition of function $a and function $b. You can verify it with the following snippet., (*2)

$result1 = $c($input);
$result2 = $a($b($input));

var_dump($result1 === $result2); //true

API

function composeMixins(Recipe $recipe, callable ...$mixins) 

Recipes

This library comes with a few (most frequently used) built in recipes. These recipes define how functions are composed together., (*3)

  • pipe: h(x) = g(f(x))
  • map: h(list) = array_map(g, (array_map(f, list)))
  • all: returns true if all functions (eg. f(x), g(x)...) return true.
  • any: returns true if any function returns true.

To use any recipe, create new instance with their names passed into constructor., (*4)

new Recipe('map');

You can create new recipes on the fly. Just pass in a closure., (*5)

/* use a different handler each time the composed function is called */
$r = Recipe::fromCallable(function(...$fns){
    static $i = 0;
    return function($input) use (&$i, $fns){
        try{
            return $fns[$i++]($input);
        } catch( Error $e ){
            return null;
        }

    };
});

You can define your own RecipeHandlers in your own code, and pass it to the recipe constructor., (*6)

Class MyRecipeHandler{
    //...
}
$CustomRecipe = new Recipe('fancy', ['handler' => 'MyRecipeHandler']);

Please take a look at RecipeHandler.php in this library to learn how to write your own handlers., (*7)

Caveat

  • Functions composed with map and collapse recipes also accept Traversable as input.
  • For all and any recipes, all functions are always evaluated regardless of their return values.

Testing

PHPUnit is overkill for this project. To do a simple test, execute php tests/composeMixinsTest.php and see if all assertions pass., (*8)

The Versions

15/06 2018

dev-master

9999999-dev

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

27/01 2018

0.1.1

0.1.1.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

27/01 2018

0.1.0

0.1.0.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

23/01 2018

0.0.3

0.0.3.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

23/01 2018

0.0.2

0.0.2.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

23/01 2018

0.0.1

0.0.1.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno

23/01 2018

0.0.0

0.0.0.0

Customizable function composition for PHP.

  Sources   Download

MIT

The Requires

  • php >=5.6

 

by Avatar Reasno