Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Ouzo Goodies Laravel Package

letsdrink/ouzo-goodies

View on GitHub
Deep Wiki
Context7

Ouzo Goodies

What is it

Utility classes, test assertions and mocking framework extracted from Ouzo framework. PHP 8.4 or later is required.

Build Status Latest Stable Version Total Downloads License

How to use it

Couple of examples.

Fluent arrays:

$result = FluentArray::from($users)
             ->map(Functions::extractField('name'))
             ->filter(Functions::notEmpty())
             ->unique()
             ->toArray();

Fluent iterator:

$result = FluentIterator::fromArray([1, 2, 3])
             ->cycle()
             ->limit(10)
             ->reindex()
             ->toArray(); // [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]

Fluent functions:

$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'));

Extract (from Functions):

$cities = Arrays::map($users, Functions::extract()->getAddress('home')->city);

Clock:

$string = Clock::now()
    ->plusYears(1)
    ->plusMonths(2)
    ->minusDays(3)
    ->format();

Comparators:

$product1 = new Product(['name' => 'b']);
$product2 = new Product(['name' => 'c']);
$product3 = new Product(['name' => 'a']);

$result = Arrays::sort([$product1, $product2, $product3], Comparator::compareBy('name'));

Fluent assertions for arrays:

$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);

Mocking:

$mock = Mock::create();
Mock::when($mock)->someMethod('arg')->thenReturn('123');

$result = $mock->someMethod('arg');

$this->assertEquals('123', $result);
Mock::verify($mock)->method('arg');

Exception assertions:

$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

Ouzo Goodies at packagist.

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:

Check out full docs at http://ouzo.readthedocs.org

PhpStorm plugins:

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
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium