Size can also be used with dot notation (#25)

* Size can also be used with dot notation (for example, {{ my_string.size }}).

* Fixed test failed.

* Optimization
This commit is contained in:
chenos
2017-03-20 15:06:32 +08:00
committed by Jun Yang
parent 5b5db616e2
commit b307f6ffd0
2 changed files with 14 additions and 0 deletions
+10
View File
@@ -1,6 +1,7 @@
const _ = require('./util/underscore.js');
const lexical = require('./lexical.js');
const assert = require('./util/assert.js');
const toStr = Object.prototype.toString;
var Scope = {
getAll: function() {
@@ -75,7 +76,16 @@ var Scope = {
throw new TypeError('undefined variable');
}
var variable = obj[varName];
var lastName = paths.pop();
paths.forEach(p => variable = variable[p]);
if (undefined !== lastName) {
if (lastName === 'size' &&
(toStr.call(variable) === '[object Array]'
|| toStr.call(variable) === '[object String]')) {
return variable.length;
}
variable = variable[lastName]
}
return variable;
},
+4
View File
@@ -221,6 +221,10 @@ describe('filters', function() {
' | split: ", " %}{{ my_array | size }}',
'4');
});
it('should also be used with dot notation - string',
() => test('{% assign my_string = "Ground control to Major Tom." %}{{ my_string.size }}', '28'));
it('should also be used with dot notation - array',
() => test('{% assign my_array = "apples, oranges, peaches, plums" | split: ", " %}{{ my_array.size }}', '4'));
});
describe('slice', function() {