letsdrink / ouzo-goodies
Utility classes, test assertions and mocking framework extracted from Ouzo framework.
4.0.0
2026-04-28 08:15 UTC
README
What is it
Utility classes, test assertions and mocking framework extracted from Ouzo framework. PHP 8.4 or later is required.
How to use it
Couple of examples.
$result = FluentArray::from($users) ->map(Functions::extractField('name')) ->filter(Functions::notEmpty()) ->unique() ->toArray();
$result = FluentIterator::fromArray([1, 2, 3]) ->cycle() ->limit(10) ->reindex() ->toArray(); // [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]
$product = new Product(['name' => 'super phone']); $function = FluentFunctions::extractField('name') ->removePrefix('super') ->prepend(' extra') ->append('! ') ->surroundWith("***"); $result = Functions::call($function, $product); //=> '*** extra phone! ***'
$phones = Arrays::filter($products, FluentFunctions::extractField('type')->equals('PHONE'));
$cities = Arrays::map($users, Functions::extract()->getAddress('home')->city);
$string = Clock::now() ->plusYears(1) ->plusMonths(2) ->minusDays(3) ->format();
$product1 = new Product(['name' => 'b']); $product2 = new Product(['name' => 'c']); $product3 = new Product(['name' => 'a']); $result = Arrays::sort([$product1, $product2, $product3], Comparator::compareBy('name'));
$animals = ['cat', 'dog', 'pig']; Assert::thatArray($animals)->hasSize(3)->contains('cat');
Fluent assertions for strings:
Assert::thatString("Frodo") ->startsWith("Fro") ->endsWith("do") ->contains("rod") ->doesNotContain("fro") ->hasSize(5);
$mock = Mock::create(); Mock::when($mock)->someMethod('arg')->thenReturn('123'); $result = $mock->someMethod('arg'); $this->assertEquals('123', $result); Mock::verify($mock)->method('arg');
$foo = new Foo(); CatchException::when($foo)->method(); CatchException::assertThat()->isInstanceOf("FooException");
This is just a taste of Ouzo. Look at the documentation for more goodies.
Where to get it
Download from github or simply add composer dependency:
composer require letsdrink/ouzo-goodies
Documentation
Tutorials:
Utilities:
- Arrays - Helper functions for arrays.
- FluentArray - Interface for manipulating arrays in a chained fashion.
- Iterators - Helper functions for iterators.
- FluentIterator- Interface for manipulating iterators in a chained fashion.
- Strings - Helper functions for strings.
- Objects- Helper functions that can operate on any PHP object.
- Functions - Static utility methods returning closures that can be used with Arrays and FluentArray, or other PHP functions.
- FluentFunctions - Fluent utility for function composition.
- Cache - General-purpose cache.
- Path - Helper functions for path operations.
- Clock - DateTime replacement.
- Comparators - Sorting.
Tests:
- Assertions for arrays
- Assertions for exceptions
- Assertions for strings
- Mocking
- Testing time-dependent code
Check out full docs at http://ouzo.readthedocs.org
PhpStorm plugins:
- Ouzo framework plugin
- DynamicReturnTypePlugin - for Mock and CatchException. You have to copy dynamicReturnTypeMeta.json to your project root.
For ideas, questions, discussions write to ouzo-framework@googlegroups.com.
Support for older PHP versions
Ouzo Goodies 4.x requires PHP 8.4 or later. For older PHP versions:
- PHP 8.2 — use Ouzo 3.x branch
- PHP 8.0 — use Ouzo 2.x branch
- PHP 5.6 / 7.x — use Ouzo 1.x branch