From 708a55cb3894036c95b942e1904acf13210e4e8a Mon Sep 17 00:00:00 2001 From: Wojciech Zawistowski Date: Wed, 9 Oct 2013 18:24:33 +0200 Subject: [PATCH] refactors Discourse.Computed to bind context to self --- .../discourse/components/computed.js | 12 +++--- test/javascripts/components/computed_test.js | 39 ++++++++++++++++--- 2 files changed, 39 insertions(+), 12 deletions(-) diff --git a/app/assets/javascripts/discourse/components/computed.js b/app/assets/javascripts/discourse/components/computed.js index 804561b7dd2..eb9c53b83d6 100644 --- a/app/assets/javascripts/discourse/components/computed.js +++ b/app/assets/javascripts/discourse/components/computed.js @@ -40,9 +40,9 @@ Discourse.computed = { var args = Array.prototype.slice.call(arguments, 0); var format = args.pop(); var computed = Ember.computed(function() { - var context = this; + var self = this; return I18n.t(format.fmt.apply(format, args.map(function (a) { - return context.get(a); + return self.get(a); }))); }); return computed.property.apply(computed, args); @@ -61,9 +61,9 @@ Discourse.computed = { var args = Array.prototype.slice.call(arguments, 0); var format = args.pop(); var computed = Ember.computed(function() { - var context = this; + var self = this; return format.fmt.apply(format, args.map(function (a) { - return context.get(a); + return self.get(a); })); }); return computed.property.apply(computed, args); @@ -82,9 +82,9 @@ Discourse.computed = { var args = Array.prototype.slice.call(arguments, 0); var format = args.pop(); var computed = Ember.computed(function() { - var context = this; + var self = this; return Discourse.getURL(format.fmt.apply(format, args.map(function (a) { - return context.get(a); + return self.get(a); }))); }); return computed.property.apply(computed, args); diff --git a/test/javascripts/components/computed_test.js b/test/javascripts/components/computed_test.js index 8041045d4ee..c7cc2e8727b 100644 --- a/test/javascripts/components/computed_test.js +++ b/test/javascripts/components/computed_test.js @@ -1,10 +1,22 @@ -module("Discourse.Computed"); +module("Discourse.Computed", { + setup: function() { + sinon.stub(I18n, "t", function(scope) { + return "%@ translated: " + scope; + }); + }, + + teardown: function() { + I18n.t.restore(); + } +}); var testClass = Em.Object.extend({ same: Discourse.computed.propertyEqual('cookies', 'biscuits'), diff: Discourse.computed.propertyNotEqual('cookies', 'biscuits'), exclaimyUsername: Discourse.computed.fmt('username', "!!! %@ !!!"), multiple: Discourse.computed.fmt('username', 'mood', "%@ is %@"), + translatedExclaimyUsername: Discourse.computed.i18n('username', "!!! %@ !!!"), + translatedMultiple: Discourse.computed.i18n('username', 'mood', "%@ is %@"), userUrl: Discourse.computed.url('username', "/users/%@") }); @@ -38,12 +50,28 @@ test("fmt", function() { }); equal(t.get('exclaimyUsername'), '!!! eviltrout !!!', "it inserts the string"); - equal(t.get('multiple'), "eviltrout is happy"); + equal(t.get('multiple'), "eviltrout is happy", "it inserts multiple strings"); t.set('username', 'codinghorror'); - equal(t.get('multiple'), "codinghorror is happy", "supports changing proerties"); + equal(t.get('multiple'), "codinghorror is happy", "it supports changing properties"); t.set('mood', 'ecstatic'); - equal(t.get('multiple'), "codinghorror is ecstatic", "supports changing another property"); + equal(t.get('multiple'), "codinghorror is ecstatic", "it supports changing another property"); +}); + + +test("i18n", function() { + var t = testClass.create({ + username: 'eviltrout', + mood: "happy" + }); + + equal(t.get('translatedExclaimyUsername'), '%@ translated: !!! eviltrout !!!', "it inserts the string and then translates"); + equal(t.get('translatedMultiple'), "%@ translated: eviltrout is happy", "it inserts multiple strings and then translates"); + + t.set('username', 'codinghorror'); + equal(t.get('translatedMultiple'), "%@ translated: codinghorror is happy", "it supports changing properties"); + t.set('mood', 'ecstatic'); + equal(t.get('translatedMultiple'), "%@ translated: codinghorror is ecstatic", "it supports changing another property"); }); @@ -56,5 +84,4 @@ test("url with a prefix", function() { Discourse.BaseUri = "/prefixed/"; var t = testClass.create({ username: 'eviltrout' }); equal(t.get('userUrl'), "/prefixed/users/eviltrout"); - -}); \ No newline at end of file +});