Changeset 1667
- Timestamp:
- 06/30/08 23:06:09 (2 months ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/src/main/php/net/stubbles/ipo/request/broker/stubRequestBroker.php
r1665 r1667 49 49 * does the real action 50 50 * 51 * @param stubRequest $request52 * @param object $objectthe object instance to fill with values53 * @param string $prefixoptional prefix for access to request values54 * @param bool $required optional make everything on the object optional51 * @param stubRequest $request 52 * @param object $object the object instance to fill with values 53 * @param string $prefix optional prefix for access to request values 54 * @param array<string,stubFilter> $overruleFilters optional list of filters to overrule annotated filters with 55 55 * @throws stubIllegalArgumentException 56 56 */ 57 public function process(stubRequest $request, $object, $prefix = '', $required = true)57 public function process(stubRequest $request, $object, $prefix = '', array $overruleFilters = array()) 58 58 { 59 59 if ($object instanceof stubObject) { 60 60 $refClass = $object->getClass(); 61 } elseif (is_object($object) == true) {61 } elseif (is_object($object) === true) { 62 62 $refClass = new stubReflectionClass(get_class($object)); 63 63 } else { … … 67 67 foreach ($refClass->getPropertiesByMatcher(self::$methodAndPropertyMatcher) as $refProperty) { 68 68 $filterAnnotation = $refProperty->getAnnotation('Filter'); 69 if (false === $required) { 70 $filterAnnotation->setRequired(false); 69 $fieldName = $filterAnnotation->getFieldName(); 70 if (isset($overruleFilters[$fieldName]) === true) { 71 $filter = $overruleFilters[$fieldName]; 72 } else { 73 $filter = $filterAnnotation->getFilter(); 71 74 } 72 75 73 $value = $request->getFilteredValue($filter Annotation->getFilter(), $prefix . $filterAnnotation->getFieldName());76 $value = $request->getFilteredValue($filter, $prefix . $fieldName); 74 77 if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 75 78 $refProperty->setValue($object, $value); … … 79 82 foreach ($refClass->getMethodsByMatcher(self::$methodAndPropertyMatcher) as $refMethod) { 80 83 $filterAnnotation = $refMethod->getAnnotation('Filter'); 81 if (false === $required) { 82 $filterAnnotation->setRequired(false); 84 $fieldName = $filterAnnotation->getFieldName(); 85 if (isset($overruleFilters[$fieldName]) === true) { 86 $filter = $overruleFilters[$fieldName]; 87 } else { 88 $filter = $filterAnnotation->getFilter(); 83 89 } 84 90 85 $value = $request->getFilteredValue($filter Annotation->getFilter(), $prefix . $filterAnnotation->getFieldName());91 $value = $request->getFilteredValue($filter, $prefix . $fieldName); 86 92 if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 87 93 $refMethod->invoke($object, $value); trunk/src/test/php/net/stubbles/ipo/request/broker/stubRequestBrokerTestCase.php
r1578 r1667 57 57 public function withClassThatIsNotInstanceOfStubObject() 58 58 { 59 $this->mockRequest->expects($this-> exactly(2))59 $this->mockRequest->expects($this->at(0)) 60 60 ->method('getFilteredValue') 61 ->will($this->onConsecutiveCalls('foo', 'bar')); 61 ->with($this->isInstanceOf('stubAbstractFilterDecorator'), $this->equalTo('foo')) 62 ->will($this->returnValue('foo')); 63 $this->mockRequest->expects($this->at(2)) 64 ->method('getFilteredValue') 65 ->with($this->isInstanceOf('stubAbstractFilterDecorator'), $this->equalTo('bar')) 66 ->will($this->returnValue('bar')); 62 67 $this->mockRequest->expects($this->exactly(2)) 63 68 ->method('hasValueError') … … 78 83 public function withClassThatIsInstanceOfStubObject() 79 84 { 80 $this->mockRequest->expects($this-> exactly(2))85 $this->mockRequest->expects($this->at(0)) 81 86 ->method('getFilteredValue') 82 ->will($this->onConsecutiveCalls('foo', 'bar')); 87 ->with($this->isInstanceOf('stubAbstractFilterDecorator'), $this->equalTo('prefix_foo')) 88 ->will($this->returnValue('foo')); 89 $this->mockRequest->expects($this->at(2)) 90 ->method('getFilteredValue') 91 ->with($this->isInstanceOf('stubAbstractFilterDecorator'), $this->equalTo('prefix_bar')) 92 ->will($this->returnValue('bar')); 83 93 $this->mockRequest->expects($this->exactly(2)) 84 94 ->method('hasValueError') … … 93 103 94 104 /** 95 * test broking w hen everything should be treated as optional105 * test broking with a class that is not an instance of net::stubbles::lang::stubObject 96 106 * 97 107 * @test 98 108 */ 99 public function with IsOptionalEnabled()109 public function withClassThatIsNotInstanceOfStubObjectAndFilterOverruling() 100 110 { 111 $overrules = array('foo' => $this->getMock('stubFilter'), 112 'bar' => $this->getMock('stubFilter') 113 ); 114 $this->mockRequest->expects($this->at(0)) 115 ->method('getFilteredValue') 116 ->with($this->isInstanceOf(get_class($overrules['foo'])), $this->equalTo('foo')) 117 ->will($this->returnValue('foo')); 118 $this->mockRequest->expects($this->at(2)) 119 ->method('getFilteredValue') 120 ->with($this->isInstanceOf(get_class($overrules['bar'])), $this->equalTo('bar')) 121 ->will($this->returnValue('bar')); 101 122 $this->mockRequest->expects($this->exactly(2)) 123 ->method('hasValueError') 124 ->will($this->returnValue(false)); 125 $testClass = new TestBrokerClass(); 126 $this->requestBroker->process($this->mockRequest, $testClass, '', $overrules); 127 $this->assertEquals('foo', $testClass->foo); 128 $this->assertEquals('bar', $testClass->getBar()); 129 $this->assertNull($testClass->getBaz()); 130 $this->assertNull(TestBrokerClass::$dummy); 131 } 132 133 /** 134 * test broking with a class that is an instance of net::stubbles::lang::stubObject 135 * 136 * @test 137 */ 138 public function withClassThatIsInstanceOfStubObjectAndFilterOverruling() 139 { 140 $overrules = array('foo' => $this->getMock('stubFilter'), 141 'bar' => $this->getMock('stubFilter') 142 ); 143 $this->mockRequest->expects($this->at(0)) 102 144 ->method('getFilteredValue') 103 ->will($this->onConsecutiveCalls(null, null)); 145 ->with($this->isInstanceOf(get_class($overrules['foo'])), $this->equalTo('prefix_foo')) 146 ->will($this->returnValue('foo')); 147 $this->mockRequest->expects($this->at(2)) 148 ->method('getFilteredValue') 149 ->with($this->isInstanceOf(get_class($overrules['bar'])), $this->equalTo('prefix_bar')) 150 ->will($this->returnValue('bar')); 104 151 $this->mockRequest->expects($this->exactly(2)) 105 152 ->method('hasValueError') 106 153 ->will($this->returnValue(false)); 107 154 $testClass = new TestBrokerObject(); 108 $this->requestBroker->process($this->mockRequest, $testClass, 'prefix_', false);109 $this->assert Null($testClass->foo);110 $this->assert Null($testClass->getBar());155 $this->requestBroker->process($this->mockRequest, $testClass, 'prefix_', $overrules); 156 $this->assertEquals('foo', $testClass->foo); 157 $this->assertEquals('bar', $testClass->getBar()); 111 158 $this->assertNull($testClass->getBaz()); 112 159 $this->assertNull(TestBrokerObject::$dummy);
