brucegithub/minimal-vo

Minimal lib to use vo: immutability, semantic, typed objects

v0.1.0 2022-04-06 20:28 UTC

This package is auto-updated.

Last update: 2024-04-10 22:49:50 UTC


README

Minimal lib to use vo: immutability, semantic, typed objects

Latest Stable Version Latest Unstable Version License Build Status Scrutinizer Code Quality codecov

Usage

composer require brucegithub/minimal-vo

Example

<?php

namespace Tests\Example;

use MinimalVo\BaseValueObject\AbstractVo;

/**
 * @template-extends AbstractVo<bool,CustomVo>
 */
class CustomVo extends AbstractVo
{

    public function __construct(bool $value, protected string $value2)
    {
        parent::__construct($value);
    }


    public function equal($vo): bool
    {
        if ($this->value === $vo->value &&
            $this->value2 === $vo->value2) {
            return true;
        }

        return false;
    }

    public function valid(): bool
    {
        if ($this->value && $this->value2) {
            return true;
        }

        return false;
    }

    public function duplicate()
    {
        return new self($this->value, $this->value2);
    }
}
<?php

namespace Tests\Example;

use MinimalVo\BaseValueObject\AbstractVo;
use MinimalVo\BaseValueObject\IntegerVo;

/**
 * @template-extends AbstractVo<IntegerVo,CustomVoOfVo>
 */
class CustomVoOfVo extends AbstractVo
{

    public function __construct(IntegerVo $value, protected int $value2)
    {
        parent::__construct($value);
    }


    public function equal($vo): bool
    {
        if ($this->value === $vo->toValue() &&
            $this->value2 === $vo->value2) {
            return true;
        }

        return false;
    }

    public function valid(): bool
    {
        if ($this->value->toValue() >1 && $this->value2>1) {
            return true;
        }

        return false;
    }

    public function duplicate()
    {
        return new self($this->value, $this->value2);
    }
}
<?php

namespace Tests\Example;

use MinimalVo\BaseValueObject\AbstractVo;

/**
 * @template-extends AbstractVo<\DateTimeImmutable,CustomDateTimeVo>
 */
class CustomDateTimeVo extends AbstractVo
{

    public function __construct(\DateTimeImmutable $value)
    {
        parent::__construct($value);
    }


    public function equal($vo): bool
    {
        if ($this->value === $vo->toValue()) {
            return true;
        }

        return false;
    }

    public function valid(): bool
    {
        return false;
    }

    public function duplicate()
    {
        return new self($this->value);
    }
}