[limb-svn] r7106 - in 3.x/trunk/limb/validation: src tests/cases

svn at limb-project.com svn at limb-project.com
Thu Jul 10 00:03:38 MSD 2008


Author: conf
Date: 2008-07-10 00:03:37 +0400 (Thu, 10 Jul 2008)
New Revision: 7106
URL: http://fisheye.limb-project.com/changelog/limb/?cs=7106

Modified:
   3.x/trunk/limb/validation/src/lmbValidatorBuilder.class.php
   3.x/trunk/limb/validation/tests/cases/lmbValidatorBuilderTest.class.php
Log:
-- fixing macro tests.-- added path resolving from LIMB_RULES_INCLUDE_PATH like 'limb/*/src/rules/'
-- useless registerRule function is removed
-- all rules must have lmb prefix and Rule.class.php suffix (isn't it too strict?)
-- fixed bug in lmbValidatorBuilder::trim function with wrong trimming objects and arrays
-- fixed lmbValidatorBuilder tests



Modified: 3.x/trunk/limb/validation/src/lmbValidatorBuilder.class.php
===================================================================
--- 3.x/trunk/limb/validation/src/lmbValidatorBuilder.class.php	2008-07-09 15:25:33 UTC (rev 7105)
+++ 3.x/trunk/limb/validation/src/lmbValidatorBuilder.class.php	2008-07-09 20:03:37 UTC (rev 7106)
@@ -11,7 +11,7 @@
 lmb_require('limb/core/src/lmbHandle.class.php');
 lmb_require('limb/validation/src/lmbValidator.class.php');
 
- at define('LIMB_RULES_INCLUDE_PATH', 'limb/validation/src/rule');
+ at define('LIMB_RULES_INCLUDE_PATH', 'src/rule;limb/*/src/rule;limb/web_app/src/validation/rule');
 
 /**
  * Builds new or fills with the rules existing lmbValidator object, simplifying constructing rules
@@ -40,13 +40,6 @@
   );
 
   /**
-   * User defined rules, can be filled dynamically using function registerRule
-   * 
-   * @var array $rule_name => $path
-   */
-  static protected $user_rules = array();
-
-  /**
    * Main function for building rules.
    *
    * @param array $rules_lists - list (array) of rules' lists, $field => $list.
@@ -117,7 +110,6 @@
    */  
   protected static function parseRule($field, $rule, $args = '') 
   {
-
     $params = array();
 
     if(!preg_match('/^([^\[]+)(\[(.+)\])?$/i', $rule, $matches)) // let's parse the rule
@@ -127,7 +119,7 @@
 
     $rule_name = $matches[1];
     
-    if (is_array($args) && $args) // args in array overlay args in square brackets
+    if(is_array($args) && $args) // args in array overlay args in square brackets
     {
       $params = array_values($args);
     }
@@ -138,7 +130,7 @@
     
     array_unshift($params, $field); // field must be the first in params
 
-    if (is_string($args) && $args) // if $args is a string, then it's a custom error message
+    if(is_string($args) && $args) // if $args is a string, then it's a custom error message
     {
       array_push($params, $args); // and must be the last in the $params 
     }
@@ -152,41 +144,43 @@
 
   static function getPathByRuleName($rule_name) 
   {
-    if(isset(self :: $user_rules[$rule_name])) 
-    {
-      return $user_rules[$rule_name];
-    } 
-    elseif(isset(self :: $rules_shortcuts[$rule_name])) 
-    {
-      return LIMB_RULES_INCLUDE_PATH . '/' . self :: getLmbRule(self :: $rules_shortcuts[$rule_name]);
-    } 
-    elseif(strpos($rule_name, 'lmb') === 0) // $rule_name is exactly limb filename
-    { 
-      return LIMB_RULES_INCLUDE_PATH . '/' . $rule_name . '.class.php';
-    } 
-    else 
-    {
-      return LIMB_RULES_INCLUDE_PATH . '/' . self :: getLmbRule($rule_name);
+    $start_dirs = explode(PATH_SEPARATOR, LIMB_RULES_INCLUDE_PATH);
+    $rule_file_name = self :: getLmbRule($rule_name);    
+    foreach($start_dirs as $dir)
+    {      
+      $full_path = $dir . '/' . $rule_file_name;
+            
+      if(lmb_glob($full_path))
+      {
+        return $full_path;
+      }        
     }
+    
+    throw new lmbException("Rule $rule_name was not found in " . LIMB_RULES_INCLUDE_PATH);    
   }
 
   static function getLmbRule($underscored_name) 
   {
+    if(isset(self :: $rules_shortcuts[$underscored_name]))
+    {
+      $underscored_name = self :: $rules_shortcuts[$underscored_name];
+    }
+    
     return 'lmb' . lmb_camel_case($underscored_name) . 'Rule.class.php';
   }
 
-  static function registerRule($name, $path) 
-  {
-    self :: $user_rules[$name] = $path;
-  }
-
   static function trim($arr) 
   {
     $trimmed = array();
-
+    
     foreach($arr as $key => $value) 
     {
-      $trimmed[$key] = trim($value);
+      if(!is_object($value) && !is_array($value))
+      {    
+        $value = trim($value);
+      }        
+      
+      $trimmed[$key] = $value;
     }
 
     return $trimmed;

Modified: 3.x/trunk/limb/validation/tests/cases/lmbValidatorBuilderTest.class.php
===================================================================
--- 3.x/trunk/limb/validation/tests/cases/lmbValidatorBuilderTest.class.php	2008-07-09 15:25:33 UTC (rev 7105)
+++ 3.x/trunk/limb/validation/tests/cases/lmbValidatorBuilderTest.class.php	2008-07-09 20:03:37 UTC (rev 7106)
@@ -6,6 +6,8 @@
  * @copyright  Copyright © 2004-2007 BIT(http://bit-creative.com)
  * @license    LGPL http://www.gnu.org/copyleft/lesser.html 
  */
+ at define('LIMB_RULES_INCLUDE_PATH', 'limb/*/src/validation/rule;limb/*/src/rule;');
+
 lmb_require('limb/validation/src/lmbValidator.class.php');
 lmb_require('limb/validation/src/lmbValidatorBuilder.class.php');
 
@@ -18,12 +20,13 @@
   function setUp()
   {
     $this->validator = new MockValidator();
+
   }
 
   function testAddRulesFromSimpleString()
   {
     $rules = array();
-    $rules['login'] = "required|matches[bbb]|size_range[5, 8]|lmbIdentifierRule";
+    $rules['login'] = "required|matches[bbb]|size_range[5, 8]|identifier";
     
     $calls_counter = 0;
     
@@ -33,7 +36,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbRequiredRule.class.php', array('login'))
+          new lmbHandle('limb/*/src/rule/lmbRequiredRule.class.php', array('login'))
         )
       )
     );
@@ -44,7 +47,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbMatchRule.class.php', array('login', 'bbb'))
+          new lmbHandle('limb/*/src/rule/lmbMatchRule.class.php', array('login', 'bbb'))
         )
       )
     );
@@ -55,7 +58,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbSizeRangeRule.class.php', array('login', 5, 8))
+          new lmbHandle('limb/*/src/rule/lmbSizeRangeRule.class.php', array('login', 5, 8))
         )
       )
     );
@@ -66,7 +69,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbIdentifierRule.class.php', array('login'))
+          new lmbHandle('limb/*/src/rule/lmbIdentifierRule.class.php', array('login'))
         )
       )
     );
@@ -89,7 +92,7 @@
       'size_range[5, 8]',
       'email' => $errors['email'],
       'pattern[/\d+/]' => $errors['pattern'],
-      'lmbSizeRangeRule[5, 8]' => array( // params [5, 8] will be ignored because of args have array type
+      'size_range[5, 8]' => array( // params [5, 8] will be ignored because of args have array type
         'min' => 10,
         'max' => 15,
         'error' => $errors['size_range']  // keys (min, max, error) are ignored, the order of args is still important
@@ -104,7 +107,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbRequiredRule.class.php', array('login'))
+          new lmbHandle('limb/*/src/rule/lmbRequiredRule.class.php', array('login'))
         )
       )
     );
@@ -114,7 +117,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbSizeRangeRule.class.php', array('login', 5, 8))
+          new lmbHandle('limb/*/src/rule/lmbSizeRangeRule.class.php', array('login', 5, 8))
         )
       )
     );
@@ -124,7 +127,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbEmailRule.class.php', array('login', $errors['email']))
+          new lmbHandle('limb/*/src/rule/lmbEmailRule.class.php', array('login', $errors['email']))
         )
       )
     );
@@ -134,7 +137,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbPatternRule.class.php', array('login', '/\d+/', $errors['pattern']))
+          new lmbHandle('limb/*/src/rule/lmbPatternRule.class.php', array('login', '/\d+/', $errors['pattern']))
         )
       )
     );
@@ -144,7 +147,7 @@
       "addRule", 
       array(
         new EqualExpectation(
-          new lmbHandle('limb/validation/src/rule/lmbSizeRangeRule.class.php', array('login', 10, 15, $errors['size_range']))
+          new lmbHandle('limb/*/src/rule/lmbSizeRangeRule.class.php', array('login', 10, 15, $errors['size_range']))
         )
       )
     );
@@ -152,4 +155,29 @@
         
     lmbValidatorBuilder :: addRules($rules, $this->validator);
   }
+  
+  function testAddCustomRules()
+  {         
+    $rules = array();
+    $rules['login'] = array(
+      "unique_table_field" => array(
+        'table' => 'user',
+        'field' => 'login'
+      )
+    );
+    
+    $calls_counter = 0;
+
+    $this->validator->expectAt(
+      $calls_counter++,
+      "addRule", 
+      array(
+        new EqualExpectation(
+          new lmbHandle('limb/*/src/validation/rule/lmbUniqueTableFieldRule.class.php', array('login', 'user', 'login'))
+        )
+      )
+    );
+    
+    lmbValidatorBuilder :: addRules($rules, $this->validator);    
+  }
 }



More information about the limb-svn mailing list