Add readme
This commit is contained in:
		
							
								
								
									
										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
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
		Reference in New Issue
	
	Block a user