letsdrink / ouzo-goodies
Utility classes, test assertions and mocking framework extracted from Ouzo framework.
4.0.0
2026-04-28 08:15 UTC
Requires
None
Requires (Dev)
None
Suggests
None
Provides
None
Conflicts
None
Replaces
None
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