示例#1
0
文件: ShopTest.php 项目: uuf6429/rune
 public function testExampleTypeInfo()
 {
     $context = new Context\ProductContext();
     $descriptor = $context->getContextDescriptor();
     $this->assertEquals(['product' => new Util\TypeInfoMember('product', ['uuf6429\\Rune\\example\\Model\\Product']), 'String' => new Util\TypeInfoMember('String', ['uuf6429\\Rune\\example\\Model\\StringUtils'])], $descriptor->getVariableTypeInfo(), 'Assert variable type information');
     $this->assertEquals([], $descriptor->getFunctionTypeInfo(), 'Assert function type information');
     $this->assertEquals(['uuf6429\\Rune\\example\\Context\\ProductContext' => new Util\TypeInfoClass('uuf6429\\Rune\\example\\Context\\ProductContext', ['product' => new Util\TypeInfoMember('product', ['uuf6429\\Rune\\example\\Model\\Product']), 'getContextDescriptor' => new Util\TypeInfoMember('getContextDescriptor', ['method'], '<div class="cm-signature"><span class="type"></span> <span class="name">getContextDescriptor</span>(<span class="args"></span>)</span></div>'), 'String' => new Util\TypeInfoMember('String', ['uuf6429\\Rune\\example\\Model\\StringUtils'], '')]), 'uuf6429\\Rune\\example\\Model\\Product' => new Util\TypeInfoClass('uuf6429\\Rune\\example\\Model\\Product', ['id' => new Util\TypeInfoMember('id', ['integer']), 'name' => new Util\TypeInfoMember('name', ['string']), 'colour' => new Util\TypeInfoMember('colour', ['string']), 'category' => new Util\TypeInfoMember('category', ['uuf6429\\Rune\\example\\Model\\Category'])]), 'uuf6429\\Rune\\example\\Model\\Category' => new Util\TypeInfoClass('uuf6429\\Rune\\example\\Model\\Category', ['id' => new Util\TypeInfoMember('id', ['integer']), 'name' => new Util\TypeInfoMember('name', ['string']), 'in' => new Util\TypeInfoMember('in', ['method'], '<div class="cm-signature"><span class="type">bool</span> <span class="name">in</span>(<span class="args"><span class="arg" title=""><span class="type">string </span>$name</span></span>)</span></div>Returns true if category name or any of its parents are identical to $name.'), 'parent' => new Util\TypeInfoMember('parent', ['uuf6429\\Rune\\example\\Model\\Category'])]), 'uuf6429\\Rune\\example\\Model\\StringUtils' => new Util\TypeInfoClass('uuf6429\\Rune\\example\\Model\\StringUtils', ['lower' => new Util\TypeInfoMember('lower', ['method'], '<div class="cm-signature"><span class="type">string</span> <span class="name">lower</span>(<span class="args"><span class="arg" title=""><span class="type">string </span>$text</span></span>)</span></div>Lowercases some text.'), 'upper' => new Util\TypeInfoMember('upper', ['method'], '<div class="cm-signature"><span class="type">string</span> <span class="name">upper</span>(<span class="args"><span class="arg" title=""><span class="type">string </span>$text</span></span>)</span></div>Uppercases some text.')])], $descriptor->getDetailedTypeInfo(), 'Assert detailed type information');
 }
示例#2
0
文件: index.php 项目: uuf6429/rune
    return new Rune\Rule\GenericRule($index + 1, $data[0], $data[1]);
}, array_keys($data['rules']), $data['rules']);
$categories = [];
$categoryProvider = function ($id) use(&$categories) {
    return $id ? $categories[$id - 1] : null;
};
$categories = array_map(function ($index, $data) use($categoryProvider) {
    return new Model\Category($index + 1, $data[0], $data[1], $categoryProvider);
}, array_keys($data['categories']), $data['categories']);
$products = array_map(function ($index, $data) use($categoryProvider) {
    return new Model\Product($index + 1, $data[0], $data[1], $data[2], $categoryProvider);
}, array_keys($data['products']), $data['products']);
$exceptionHandler = new Rune\Exception\ExceptionCollectorHandler();
$engine = new Rune\Engine($exceptionHandler);
$action = new Action\PrintAction();
$context = new Context\ProductContext();
$descriptor = $context->getContextDescriptor();
// Provide code compiled from rule conditions
$output_generated = '';
$eval = new Rune\Util\SymfonyEvaluator();
$maxLength = 0;
foreach ($rules as $rule) {
    $maxLength = max($maxLength, strlen($rule->getName()));
}
foreach ($rules as $rule) {
    try {
        $eval->setFunctions($descriptor->getFunctions());
        $eval->setVariables($descriptor->getVariables());
        $code = $eval->compile($rule->getCondition());
    } catch (\Exception $ex) {
        $code = 'Compile Error (' . get_class($ex) . '): ' . $ex->getMessage();