-
Notifications
You must be signed in to change notification settings - Fork 2
Sample test code
stevewest edited this page Oct 3, 2014
·
3 revisions
<?php
use Ve\LogicProcessor\AbstractResult;
use Ve\LogicProcessor\AbstractRule;
use Ve\LogicProcessor\Modifier\Equal;
use Ve\LogicProcessor\Modifier\Percent;
use Ve\LogicProcessor\Processor;
use Ve\LogicProcessor\RuleSet;
require __DIR__.'/vendor/autoload.php';
class HasProductRule extends AbstractRule
{
public function run($context)
{
$find = null;
foreach ($context as $id => $product)
{
if ($this->getModifier()->run($product['id']))
{
$find = $product;
break;
}
}
return $find !== null;
}
}
class ProductDiscountResult extends AbstractResult
{
public function mutate(&$target)
{
$id = null;
foreach ($target as $id => $product)
{
if ($product['id'] == $this->getValue())
{
break;
}
}
if ($id !== null)
{
$target[$id]['price'] = $this->getModifier()
->run($target[$id]['price']);
}
}
}
$context = [
['id' => 1, 'name' => 'foobar', 'qty' => 12, 'price' => 10],
['id' => 2, 'name' => 'bazbat', 'qty' => 9, 'price' => 25],
];
$modifier = new Equal();
$modifier->setTargetValue(1);
$rule = new HasProductRule();
$rule->setModifier($modifier);
$result = new ProductDiscountResult();
$resultMod = new Percent();
$resultMod->setTargetValue(50);
$result->setModifier($resultMod);
$result->setValue(1);
$ruleSet = new RuleSet();
$ruleSet->setRule($rule);
$ruleSet->addResult($result);
$pro = new Processor;
$pro->addRuleSet($ruleSet);
$pro->run($context, $context);
var_dump($context);