From 641e6ee7cfae41c87b9c00a711c081391b35a3be Mon Sep 17 00:00:00 2001 From: Antonio Ramirez Date: Wed, 22 May 2013 08:34:17 +0200 Subject: [PATCH] ported inflection methods from StringHelper to Inflector helper class --- framework/yii/base/Model.php | 4 +- framework/yii/db/ActiveRecord.php | 5 +- framework/yii/helpers/base/StringHelper.php | 80 ----------------------- tests/unit/framework/helpers/StringHelperTest.php | 52 --------------- 4 files changed, 5 insertions(+), 136 deletions(-) diff --git a/framework/yii/base/Model.php b/framework/yii/base/Model.php index 98901bf..c7432f5 100644 --- a/framework/yii/base/Model.php +++ b/framework/yii/base/Model.php @@ -9,7 +9,7 @@ namespace yii\base; use ArrayObject; use ArrayIterator; -use yii\helpers\StringHelper; +use yii\helpers\Inflector; use yii\validators\RequiredValidator; use yii\validators\Validator; @@ -504,7 +504,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess */ public function generateAttributeLabel($name) { - return StringHelper::camel2words($name, true); + return Inflector::camel2words($name, true); } /** diff --git a/framework/yii/db/ActiveRecord.php b/framework/yii/db/ActiveRecord.php index 2b7d2b8..dd90782 100644 --- a/framework/yii/db/ActiveRecord.php +++ b/framework/yii/db/ActiveRecord.php @@ -18,6 +18,7 @@ use yii\db\Connection; use yii\db\TableSchema; use yii\db\Expression; use yii\helpers\StringHelper; +use yii\helpers\Inflector; /** * ActiveRecord is the base class for classes representing relational data in terms of objects. @@ -261,14 +262,14 @@ class ActiveRecord extends Model /** * Declares the name of the database table associated with this AR class. - * By default this method returns the class name as the table name by calling [[StringHelper::camel2id()]] + * By default this method returns the class name as the table name by calling [[Inflector::camel2id()]] * with prefix 'tbl_'. For example, 'Customer' becomes 'tbl_customer', and 'OrderItem' becomes * 'tbl_order_item'. You may override this method if the table is not named after this convention. * @return string the table name */ public static function tableName() { - return 'tbl_' . StringHelper::camel2id(StringHelper::basename(get_called_class()), '_'); + return 'tbl_' . Inflector::camel2id(StringHelper::basename(get_called_class()), '_'); } /** diff --git a/framework/yii/helpers/base/StringHelper.php b/framework/yii/helpers/base/StringHelper.php index 646bcbb..5b854ac 100644 --- a/framework/yii/helpers/base/StringHelper.php +++ b/framework/yii/helpers/base/StringHelper.php @@ -65,84 +65,4 @@ class StringHelper } return $path; } - - /** - * Converts a word to its plural form. - * Note that this is for English only! - * For example, 'apple' will become 'apples', and 'child' will become 'children'. - * @param string $name the word to be pluralized - * @return string the pluralized word - */ - public static function pluralize($name) - { - static $rules = array( - '/(m)ove$/i' => '\1oves', - '/(f)oot$/i' => '\1eet', - '/(c)hild$/i' => '\1hildren', - '/(h)uman$/i' => '\1umans', - '/(m)an$/i' => '\1en', - '/(s)taff$/i' => '\1taff', - '/(t)ooth$/i' => '\1eeth', - '/(p)erson$/i' => '\1eople', - '/([m|l])ouse$/i' => '\1ice', - '/(x|ch|ss|sh|us|as|is|os)$/i' => '\1es', - '/([^aeiouy]|qu)y$/i' => '\1ies', - '/(?:([^f])fe|([lr])f)$/i' => '\1\2ves', - '/(shea|lea|loa|thie)f$/i' => '\1ves', - '/([ti])um$/i' => '\1a', - '/(tomat|potat|ech|her|vet)o$/i' => '\1oes', - '/(bu)s$/i' => '\1ses', - '/(ax|test)is$/i' => '\1es', - '/s$/' => 's', - ); - foreach ($rules as $rule => $replacement) { - if (preg_match($rule, $name)) { - return preg_replace($rule, $replacement, $name); - } - } - return $name . 's'; - } - - /** - * Converts a CamelCase name into space-separated words. - * For example, 'PostTag' will be converted to 'Post Tag'. - * @param string $name the string to be converted - * @param boolean $ucwords whether to capitalize the first letter in each word - * @return string the resulting words - */ - public static function camel2words($name, $ucwords = true) - { - $label = trim(strtolower(str_replace(array('-', '_', '.'), ' ', preg_replace('/(?assertEquals('ั', StringHelper::substr('ัั‚ะพ', 0, 2)); } - public function testPluralize() - { - $testData = array( - 'move' => 'moves', - 'foot' => 'feet', - 'child' => 'children', - 'human' => 'humans', - 'man' => 'men', - 'staff' => 'staff', - 'tooth' => 'teeth', - 'person' => 'people', - 'mouse' => 'mice', - 'touch' => 'touches', - 'hash' => 'hashes', - 'shelf' => 'shelves', - 'potato' => 'potatoes', - 'bus' => 'buses', - 'test' => 'tests', - 'car' => 'cars', - ); - - foreach ($testData as $testIn => $testOut) { - $this->assertEquals($testOut, StringHelper::pluralize($testIn)); - $this->assertEquals(ucfirst($testOut), ucfirst(StringHelper::pluralize($testIn))); - } - } - - public function testCamel2words() - { - $this->assertEquals('Camel Case', StringHelper::camel2words('camelCase')); - $this->assertEquals('Lower Case', StringHelper::camel2words('lower_case')); - $this->assertEquals('Tricky Stuff It Is Testing', StringHelper::camel2words(' tricky_stuff.it-is testing... ')); - } - - public function testCamel2id() - { - $this->assertEquals('post-tag', StringHelper::camel2id('PostTag')); - $this->assertEquals('post_tag', StringHelper::camel2id('PostTag', '_')); - - $this->assertEquals('post-tag', StringHelper::camel2id('postTag')); - $this->assertEquals('post_tag', StringHelper::camel2id('postTag', '_')); - } - - public function testId2camel() - { - $this->assertEquals('PostTag', StringHelper::id2camel('post-tag')); - $this->assertEquals('PostTag', StringHelper::id2camel('post_tag', '_')); - - $this->assertEquals('PostTag', StringHelper::id2camel('post-tag')); - $this->assertEquals('PostTag', StringHelper::id2camel('post_tag', '_')); - } - public function testBasename() { $this->assertEquals('', StringHelper::basename(''));