Changeset 1667

Show
Ignore:
Timestamp:
06/30/08 23:06:09 (2 months ago)
Author:
mikey
Message:

implement enhancement #145

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/src/main/php/net/stubbles/ipo/request/broker/stubRequestBroker.php

    r1665 r1667  
    4949     * does the real action 
    5050     * 
    51      * @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   bool         $required  optional  make everything on the object optional 
     51     * @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 
    5555     * @throws  stubIllegalArgumentException 
    5656     */ 
    57     public function process(stubRequest $request, $object, $prefix = '', $required = true
     57    public function process(stubRequest $request, $object, $prefix = '', array $overruleFilters = array()
    5858    { 
    5959        if ($object instanceof stubObject) { 
    6060            $refClass = $object->getClass(); 
    61         } elseif (is_object($object) == true) { 
     61        } elseif (is_object($object) === true) { 
    6262            $refClass = new stubReflectionClass(get_class($object)); 
    6363        } else { 
     
    6767        foreach ($refClass->getPropertiesByMatcher(self::$methodAndPropertyMatcher) as $refProperty) { 
    6868            $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(); 
    7174            } 
    7275             
    73             $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
     76            $value = $request->getFilteredValue($filter, $prefix . $fieldName); 
    7477            if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
    7578                $refProperty->setValue($object, $value); 
     
    7982        foreach ($refClass->getMethodsByMatcher(self::$methodAndPropertyMatcher) as $refMethod) { 
    8083            $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(); 
    8389            } 
    8490             
    85             $value = $request->getFilteredValue($filterAnnotation->getFilter(), $prefix . $filterAnnotation->getFieldName()); 
     91            $value = $request->getFilteredValue($filter, $prefix . $fieldName); 
    8692            if ($request->hasValueError($prefix . $filterAnnotation->getFieldName()) === false) { 
    8793                $refMethod->invoke($object, $value); 
  • trunk/src/test/php/net/stubbles/ipo/request/broker/stubRequestBrokerTestCase.php

    r1578 r1667  
    5757    public function withClassThatIsNotInstanceOfStubObject() 
    5858    { 
    59         $this->mockRequest->expects($this->exactly(2)) 
     59        $this->mockRequest->expects($this->at(0)) 
    6060                          ->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')); 
    6267        $this->mockRequest->expects($this->exactly(2)) 
    6368                          ->method('hasValueError') 
     
    7883    public function withClassThatIsInstanceOfStubObject() 
    7984    { 
    80         $this->mockRequest->expects($this->exactly(2)) 
     85        $this->mockRequest->expects($this->at(0)) 
    8186                          ->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')); 
    8393        $this->mockRequest->expects($this->exactly(2)) 
    8494                          ->method('hasValueError') 
     
    93103 
    94104    /** 
    95      * test broking when everything should be treated as optional 
     105     * test broking with a class that is not an instance of net::stubbles::lang::stubObject 
    96106     * 
    97107     * @test 
    98108     */ 
    99     public function withIsOptionalEnabled() 
     109    public function withClassThatIsNotInstanceOfStubObjectAndFilterOverruling() 
    100110    { 
     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')); 
    101122        $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)) 
    102144                          ->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')); 
    104151        $this->mockRequest->expects($this->exactly(2)) 
    105152                          ->method('hasValueError') 
    106153                          ->will($this->returnValue(false)); 
    107154        $testClass = new TestBrokerObject(); 
    108         $this->requestBroker->process($this->mockRequest, $testClass, 'prefix_', false); 
    109         $this->assertNull($testClass->foo); 
    110         $this->assertNull($testClass->getBar()); 
     155        $this->requestBroker->process($this->mockRequest, $testClass, 'prefix_', $overrules); 
     156        $this->assertEquals('foo', $testClass->foo); 
     157        $this->assertEquals('bar', $testClass->getBar()); 
    111158        $this->assertNull($testClass->getBaz()); 
    112159        $this->assertNull(TestBrokerObject::$dummy);