PHP Class izzum\rules\Rule

Rules should never have side effects and should only return true or false. This Rule serves as a base class for all your business logic, encapsulating and centralizing the logic in a class and making it reusable through it's interface. This is a way of seperating mechanism and policy of code. In other words: how it is done versus what should be done. The mechanism is a rule library, the policy is what is defined in the rule. https://en.wikipedia.org/wiki/Separation_of_mechanism_and_policy The rules package aims to prevent code like this: if ($name == 'blabla' && $password == 'lala') { do something here. the statement above might be duplicated in a lot of places } and substitute it by this: $rule = new AccesRule($name, $password); if($rule->applies()) { do something } or: $rule = new IsOrderTaggedForDelivery($order); $rule->applies(); usage: Clients should subclass this Rule and implement the protected '_applies' method and let that return a boolean value. A concrete Rule (a subclass) can (and should be) injected with contextual data via dependency injection in the constructor
Author: Rolf Vreijdenberger
Author: Richard Ruiter
Inheritance: implements izzum\rules\IRule
Show file Open project: rolfvreijdenberger/izzum-statemachine

Public Methods

Method Description
__toString ( )
andRule ( Rule $other ) : Rule Chain a 'AND' rule.
applies ( ) : boolean The applies method is the only point where the rule can be validated.
containsResult ( string $expected ) Check if this rule contains a certain expected result.
getCacheEnabled ( ) : boolean
getResults ( ) : RuleResult[] Gets an array of RuleResult to check if a rule has set a certain result for the client of the rule.
hasResult ( ) : boolean Has any result?
not ( ) : Rule Inverse current rule
orRule ( Rule $other ) : Rule Chain a 'OR' rule.
setCacheEnabled ( boolean $cached = true ) should we cache the result if the rule is applied more than once?
toString ( ) : string
xorRule ( Rule $other ) : Rule Chain a 'XOR' rule.

Protected Methods

Method Description
_applies ( ) : boolean A concrete rule should at least implement the _applies method and return a boolean.
addResult ( string $result ) Add a result to this rule.
getCache ( ) : boolean return the cached value
handleException ( Exception $e ) hook method for logging etc.

Private Methods

Method Description
clearCache ( )
clearResult ( ) Clear the results
setCache ( $result )
shouldReturnCache ( ) : boolean should we return a cached value?

Method Details

__toString() public method

public __toString ( )

_applies() abstract protected method

When the rule logic cannot determine if it applies then an exception should be thrown instead of a boolean value
abstract protected _applies ( ) : boolean
return boolean

addResult() final protected method

this might be useful if a client wants to check if a rule has executed certain steps during the logic of rule execution.
final protected addResult ( string $result )
$result string

andRule() final public method

This means both rules should apply.
final public andRule ( Rule $other ) : Rule
$other Rule
return Rule

applies() final public method

Internally each rule implements the _applies() method to do the actual validation. There are only two types of outcome for each rule. Either the rule applies (true) or doesn't (false). Any other outcome should always be thrown as an exception so no false assumptions can be made by the caller. For example when a rule returns a NULL value the caller may asume that false is meant. The rule cannot trust that the caller checks the boolean type so we will.
final public applies ( ) : boolean
return boolean

containsResult() final public method

This is only matched on the string, not on the class that generated the result. you can check this against constants in a class eg: Rule::RESULT_<*>. In case you want to also know the class or classname, use getResults()
See also: Rule::getResults()
final public containsResult ( string $expected )
$expected string

getCache() final protected method

return the cached value
final protected getCache ( ) : boolean
return boolean

getCacheEnabled() final public method

final public getCacheEnabled ( ) : boolean
return boolean

getResults() public method

This will mostly be useful to check what actually happened when a rule has failed and if the _applies() method actually calls 'addResult()' to state what has happened in a rule.
public getResults ( ) : RuleResult[]
return RuleResult[]

handleException() protected method

hook method for logging etc.
protected handleException ( Exception $e )
$e Exception

hasResult() final public method

Has any result?
final public hasResult ( ) : boolean
return boolean

not() final public method

Inverse current rule
final public not ( ) : Rule
return Rule

orRule() final public method

This means one of the rules should apply.
final public orRule ( Rule $other ) : Rule
$other Rule
return Rule

setCacheEnabled() final public method

should we cache the result if the rule is applied more than once?
final public setCacheEnabled ( boolean $cached = true )
$cached boolean

toString() public method

public toString ( ) : string
return string

xorRule() final public method

This means one of the rules should apply but not both.
final public xorRule ( Rule $other ) : Rule
$other Rule
return Rule