From 056ef755ff6cab25353cdba76e3956adac4bb00d Mon Sep 17 00:00:00 2001 From: Scott Windsor Date: Tue, 27 Aug 2013 18:17:30 -0700 Subject: [PATCH] [String-humanize] Add Ember.String.humanize --- packages/ember-runtime/lib/ext/string.js | 16 ++++++++++ packages/ember-runtime/lib/system/string.js | 28 ++++++++++++++++- .../tests/system/string/humanize.js | 31 +++++++++++++++++++ 3 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 packages/ember-runtime/tests/system/string/humanize.js diff --git a/packages/ember-runtime/lib/ext/string.js b/packages/ember-runtime/lib/ext/string.js index b048bd830e4..0cd62496c09 100644 --- a/packages/ember-runtime/lib/ext/string.js +++ b/packages/ember-runtime/lib/ext/string.js @@ -18,6 +18,10 @@ var fmt = Ember.String.fmt, capitalize = Ember.String.capitalize, classify = Ember.String.classify; +if (Ember.FEATURES.isEnabled("string-humanize")) { + var humanize = Ember.String.humanize; +} + if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) { /** @@ -110,5 +114,17 @@ if (Ember.EXTEND_PROTOTYPES === true || Ember.EXTEND_PROTOTYPES.String) { return capitalize(this); }; + if (Ember.FEATURES.isEnabled("string-humanize")) { + /** + See [Ember.String.humanize](/api/classes/Ember.String.html#method_humanize). + + @method humanize + @for String + */ + String.prototype.humanize = function() { + return humanize(this); + }; + } + } diff --git a/packages/ember-runtime/lib/system/string.js b/packages/ember-runtime/lib/system/string.js index bcd69db66ba..9f5fba5709d 100644 --- a/packages/ember-runtime/lib/system/string.js +++ b/packages/ember-runtime/lib/system/string.js @@ -245,5 +245,31 @@ Ember.String = { capitalize: function(str) { return str.charAt(0).toUpperCase() + str.substr(1); } - }; + +if (Ember.FEATURES.isEnabled("string-humanize")) { + /** + Returns the Humanized form of a string + + Replaces underscores with spaces, and capitializes first character + of string. Also strips "_id" suffixes. + + ```javascript + 'first_name'.humanize() // 'First name' + 'user_id'.humanize() // 'User' + ``` + + @method humanize + @param {String} str The string to humanize. + @return {String} The humanized string. + */ + + Ember.String.humanize = function(str) { + return str.replace(/_id$/, ''). + replace(/_/g, ' '). + replace(/^\w/g, function(s){ + return s.toUpperCase(); + }); + }; +} + diff --git a/packages/ember-runtime/tests/system/string/humanize.js b/packages/ember-runtime/tests/system/string/humanize.js new file mode 100644 index 00000000000..3dabb441917 --- /dev/null +++ b/packages/ember-runtime/tests/system/string/humanize.js @@ -0,0 +1,31 @@ +if (Ember.FEATURES.isEnabled("string-humanize")) { + module('Ember.String.humanize'); + + test("with underscored string", function() { + deepEqual(Ember.String.humanize('first_name'), 'First name'); + if (Ember.EXTEND_PROTOTYPES) { + deepEqual('first_name'.humanize(), 'First name'); + } + }); + + test("with multiple underscored string", function() { + deepEqual(Ember.String.humanize('first_and_last_name'), 'First and last name'); + if (Ember.EXTEND_PROTOTYPES) { + deepEqual('first_and_last_name'.humanize(), 'First and last name'); + } + }); + + test("with underscored id string", function() { + deepEqual(Ember.String.humanize('user_id'), 'User'); + if (Ember.EXTEND_PROTOTYPES) { + deepEqual('user_id'.humanize(), 'User'); + } + }); + + test("with humanized string", function() { + deepEqual(Ember.String.humanize('First name'), 'First name'); + if (Ember.EXTEND_PROTOTYPES) { + deepEqual('First name'.humanize(), 'First name'); + } + }); +}