public function testFluentInterfaceHelpersAndAnonymousVariables() { $rb = new RuleBuilder(); $context = new Context(array('a' => 1, 'b' => 2, 'c' => array(1, 4), 'd' => array('foo' => 1, 'bar' => 2, 'baz' => array('qux' => 3)), 'e' => 1.5)); $varA = new Variable($rb, 'a'); $varB = new Variable($rb, 'b'); $varC = new Variable($rb, 'c'); $varD = new Variable($rb, 'd'); $varE = new Variable($rb, 'e'); $this->assertInstanceOf('Ruler\\Operator\\GreaterThan', $varA->greaterThan(0)); $this->assertTrue($varA->greaterThan(0)->evaluate($context)); $this->assertFalse($varA->greaterThan(2)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\GreaterThanOrEqualTo', $varA->greaterThanOrEqualTo(0)); $this->assertTrue($varA->greaterThanOrEqualTo(0)->evaluate($context)); $this->assertTrue($varA->greaterThanOrEqualTo(1)->evaluate($context)); $this->assertFalse($varA->greaterThanOrEqualTo(2)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\LessThan', $varA->lessThan(0)); $this->assertTrue($varA->lessThan(2)->evaluate($context)); $this->assertFalse($varA->lessThan(0)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\LessThanOrEqualTo', $varA->lessThanOrEqualTo(0)); $this->assertTrue($varA->lessThanOrEqualTo(1)->evaluate($context)); $this->assertTrue($varA->lessThanOrEqualTo(2)->evaluate($context)); $this->assertFalse($varA->lessThanOrEqualTo(0)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\EqualTo', $varA->equalTo(0)); $this->assertTrue($varA->equalTo(1)->evaluate($context)); $this->assertFalse($varA->equalTo(0)->evaluate($context)); $this->assertFalse($varA->equalTo(2)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\NotEqualTo', $varA->notEqualTo(0)); $this->assertFalse($varA->notEqualTo(1)->evaluate($context)); $this->assertTrue($varA->notEqualTo(0)->evaluate($context)); $this->assertTrue($varA->notEqualTo(2)->evaluate($context)); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->add(3)); $this->assertInstanceof('Ruler\\Operator\\Addition', $varA->add(3)->getValue()); $this->assertInstanceof('Ruler\\Value', $varA->add(3)->prepareValue($context)); $this->assertEquals(4, $varA->add(3)->prepareValue($context)->getValue()); $this->assertEquals(0, $varA->add(-1)->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varE->ceil()); $this->assertInstanceof('Ruler\\Operator\\Ceil', $varE->ceil()->getValue()); $this->assertEquals(2, $varE->ceil()->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varB->divide(3)); $this->assertInstanceof('Ruler\\Operator\\Division', $varB->divide(3)->getValue()); $this->assertEquals(1, $varB->divide(2)->prepareValue($context)->getValue()); $this->assertEquals(-2, $varB->divide(-1)->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varE->floor()); $this->assertInstanceof('Ruler\\Operator\\Floor', $varE->floor()->getValue()); $this->assertEquals(1, $varE->floor()->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->modulo(3)); $this->assertInstanceof('Ruler\\Operator\\Modulo', $varA->modulo(3)->getValue()); $this->assertEquals(1, $varA->modulo(3)->prepareValue($context)->getValue()); $this->assertEquals(0, $varB->modulo(2)->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->multiply(3)); $this->assertInstanceof('Ruler\\Operator\\Multiplication', $varA->multiply(3)->getValue()); $this->assertEquals(6, $varB->multiply(3)->prepareValue($context)->getValue()); $this->assertEquals(-2, $varB->multiply(-1)->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->negate()); $this->assertInstanceof('Ruler\\Operator\\Negation', $varA->negate()->getValue()); $this->assertEquals(-1, $varA->negate()->prepareValue($context)->getValue()); $this->assertEquals(-2, $varB->negate()->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->subtract(3)); $this->assertInstanceof('Ruler\\Operator\\Subtraction', $varA->subtract(3)->getValue()); $this->assertEquals(-2, $varA->subtract(3)->prepareValue($context)->getValue()); $this->assertEquals(2, $varA->subtract(-1)->prepareValue($context)->getValue()); $this->assertInstanceof('Ruler\\RuleBuilder\\Variable', $varA->exponentiate(3)); $this->assertInstanceof('Ruler\\Operator\\Exponentiate', $varA->exponentiate(3)->getValue()); $this->assertEquals(1, $varA->exponentiate(3)->prepareValue($context)->getValue()); $this->assertEquals(1, $varA->exponentiate(-1)->prepareValue($context)->getValue()); $this->assertEquals(8, $varB->exponentiate(3)->prepareValue($context)->getValue()); $this->assertEquals(0.5, $varB->exponentiate(-1)->prepareValue($context)->getValue()); $this->assertFalse($varA->greaterThan($varB)->evaluate($context)); $this->assertTrue($varA->lessThan($varB)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\SetContains', $varC->setContains(1)); $this->assertTrue($varC->setContains($varA)->evaluate($context)); $this->assertInstanceOf('Ruler\\Operator\\SetDoesNotContain', $varC->setDoesNotContain(1)); $this->assertTrue($varC->setDoesNotContain($varB)->evaluate($context)); $this->assertInstanceOf('Ruler\\RuleBuilder\\VariableProperty', $varD['bar']); $this->assertEquals($varD['foo']->getName(), 'foo'); $this->assertTrue($varD['foo']->equalTo(1)->evaluate($context)); $this->assertInstanceOf('Ruler\\RuleBuilder\\VariableProperty', $varD['foo']); $this->assertEquals($varD['bar']->getName(), 'bar'); $this->assertTrue($varD['bar']->equalTo(2)->evaluate($context)); $this->assertInstanceOf('Ruler\\RuleBuilder\\VariableProperty', $varD['baz']['qux']); $this->assertEquals($varD['baz']['qux']->getName(), 'qux'); $this->assertTrue($varD['baz']['qux']->equalTo(3)->evaluate($context)); }
/** * VariableProperty class constructor. * * @param BaseVariable $parent Parent Variable instance * @param string $name Property name * @param mixed $value Default Property value (default: null) */ public function __construct(BaseVariable $parent, $name, $value = null) { $this->parent = $parent; parent::__construct($parent->getRuleBuilder(), $name, $value); }
/** * @expectedException PHPUnit_Framework_Error_Deprecated * @expectedExceptionMessage Contains operator is deprecated, please use StringContains */ public function testDeprecationNoticeForContainsWithString() { $context = new Context(array('var' => 'string')); $var = new Variable(new RuleBuilder(), 'var'); $this->assertTrue($var->contains('ring')->evaluate($context)); }