[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