Add readme
This commit is contained in:
parent
de8ad06df9
commit
5ce49cee02
71
README.md
Normal file
71
README.md
Normal file
@ -0,0 +1,71 @@
|
||||
# Reason
|
||||
|
||||
Sometimes, you need to know not only can be things done or not,
|
||||
but also _why_ things can be done.
|
||||
|
||||
## Reason status
|
||||
|
||||
Status describes current state of reason. It must be convertible to integer value -
|
||||
status weight. Status with higher weight worse then smaller weight.
|
||||
(Make sense for appending and joining.)
|
||||
|
||||
## Appending reasons (orX)
|
||||
|
||||
Reasons can be appended to other reasons. It operations can be matched with `logical or`.
|
||||
Reason with the lowest weight wins. If two reasons have same weight, those messages
|
||||
will be merged.
|
||||
|
||||
```php
|
||||
// weight: 1
|
||||
// messages: foo, bar
|
||||
$first = new Reason(...);
|
||||
|
||||
// weight: 2
|
||||
// messages: baz
|
||||
$second = new Reason(...);
|
||||
|
||||
// weight: 1
|
||||
// messages: foo, bar
|
||||
$firstOrSecond = $first->orX($second);
|
||||
|
||||
// weight: 1
|
||||
// messages: foobar
|
||||
$third = new Reason(...);
|
||||
|
||||
// weight: 1
|
||||
// messages: foo, bar, foobar
|
||||
$firstOrThird = $first->orX($third);
|
||||
```
|
||||
|
||||
## Joining reasons (andX)
|
||||
|
||||
Same behavior as appending, but reason with the highest weight wins.
|
||||
Looks like `logical and` operation.
|
||||
|
||||
```php
|
||||
// weight: 1
|
||||
// messages: foo, bar
|
||||
$first = new Reason(...);
|
||||
|
||||
// weight: 2
|
||||
// messages: baz
|
||||
$second = new Reason(...);
|
||||
|
||||
// weight: 2
|
||||
// messages: baz
|
||||
$firstAndSecond = $first->andX($second);
|
||||
|
||||
// weight: 1
|
||||
// messages: foobar
|
||||
$third = new Reason(...);
|
||||
|
||||
// weight: 1
|
||||
// messages: foo, bar, foobar
|
||||
$firstAndThird = $first->andX($third);
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
```
|
||||
$ vendor/bin/phpunit
|
||||
```
|
Loading…
Reference in New Issue
Block a user