ouzo-goodies

[READ-ONLY] Utility classes, test assertions and mocking framework extracted from Ouzo framework.

Github stars Tracking Chart

Ouzo Goodies

What is it

Utility classes, test assertions and mocking framework extracted from Ouzo framework. We are compatible with PHP 7.2 and later.

Build Status
Coverage 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 PHP 5.6, 7.0 and 7.1

Ouzo has dropped support for PHP versions older than 7.2 since Ouzo 2.x. If you want to use Ouzo with PHP 5.6, 7.0 or 7.1, please try Ouzo 1.x branch.

Main metrics

Overview
Name With Ownerletsdrink/ouzo-goodies
Primary LanguagePHP
Program languagePHP (Language Count: 1)
Platform
License:MIT License
所有者活动
Created At2014-12-16 17:41:44
Pushed At2023-06-28 21:00:51
Last Commit At2023-06-27 18:14:08
Release Count7
Last Release Name1.8.0 (Posted on )
First Release Name1.4.0 (Posted on )
用户参与
Stargazers Count128
Watchers Count13
Fork Count5
Commits Count368
Has Issues Enabled
Issues Count0
Issue Open Count0
Pull Requests Count0
Pull Requests Open Count0
Pull Requests Close Count0
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private