feature: if the provided date is 'now', create a date (#14)

This commit is contained in:
harttle
2016-10-23 00:11:22 +08:00
parent baac31b037
commit 300c3710c6
5 changed files with 46 additions and 12 deletions
+5 -3
View File
@@ -1,5 +1,5 @@
//const strftime = require('strftime').timezone(-(new Date()).getTimezoneOffset());
const strftime = require('./src/strftime.js'); const strftime = require('./src/strftime.js');
const _ = require('./src/util/underscore.js');
module.exports = function(liquid) { module.exports = function(liquid) {
liquid.registerFilter('abs', v => Math.abs(v)); liquid.registerFilter('abs', v => Math.abs(v));
@@ -8,8 +8,10 @@ module.exports = function(liquid) {
stringify(str).charAt(0).toUpperCase() + str.slice(1)); stringify(str).charAt(0).toUpperCase() + str.slice(1));
liquid.registerFilter('ceil', v => Math.ceil(v)); liquid.registerFilter('ceil', v => Math.ceil(v));
//liquid.registerFilter('date', (v, arg) => strftime(arg, v)); liquid.registerFilter('date', (v, arg) => {
liquid.registerFilter('date', (v, arg) => strftime(v, arg)); if (v === 'now') v = new Date();
return strftime(v, arg);
});
liquid.registerFilter('default', (v, arg) => arg || v); liquid.registerFilter('default', (v, arg) => arg || v);
liquid.registerFilter('divided_by', (v, arg) => Math.floor(v / arg)); liquid.registerFilter('divided_by', (v, arg) => Math.floor(v / arg));
+4 -2
View File
@@ -1,3 +1,5 @@
const _ = require('./util/underscore.js');
var Scope = { var Scope = {
safeGet: function(str) { safeGet: function(str) {
var i; var i;
@@ -41,7 +43,7 @@ var Scope = {
}; };
function setPropertyByPath(obj, path, val) { function setPropertyByPath(obj, path, val) {
if (path instanceof String || typeof path === 'string') { if (_.isString(path)) {
var paths = path.replace(/\[/g, '.').replace(/\]/g, '').split('.'); var paths = path.replace(/\[/g, '.').replace(/\]/g, '').split('.');
for (var i = 0; i < paths.length; i++) { for (var i = 0; i < paths.length; i++) {
var key = paths[i]; var key = paths[i];
@@ -58,7 +60,7 @@ function setPropertyByPath(obj, path, val) {
} }
function getPropertyByPath(obj, path) { function getPropertyByPath(obj, path) {
if (path instanceof String || typeof path === 'string') { if (_.isString(path)) {
var paths = path.replace(/\[/g, '.').replace(/\]/g, '').split('.'); var paths = path.replace(/\[/g, '.').replace(/\]/g, '').split('.');
paths.forEach(p => obj = obj && obj[p]); paths.forEach(p => obj = obj && obj[p]);
return obj; return obj;
+5
View File
@@ -0,0 +1,5 @@
function isString(value){
return value instanceof String || typeof value === 'string';
}
exports.isString = isString;
+12 -4
View File
@@ -1,8 +1,9 @@
const chai = require("chai"); const chai = require("chai");
const chaiAsPromised = require("chai-as-promised"); const expect = chai.expect;
chai.use(require("chai-as-promised"));
var liquid = require('..')(), var liquid = require('..')(),
ctx; ctx;
chai.use(chaiAsPromised);
function test(src, dst) { function test(src, dst) {
ctx = { ctx = {
@@ -19,7 +20,7 @@ function test(src, dst) {
category: 'bar' category: 'bar'
}] }]
}; };
return liquid.parseAndRender(src, ctx).should.eventually.equal(dst); return expect(liquid.parseAndRender(src, ctx)).to.eventually.equal(dst);
} }
describe('filters', function() { describe('filters', function() {
@@ -36,10 +37,17 @@ describe('filters', function() {
it('should support ceil 3', () => test('{{ "3.5" | ceil }}', '4')); it('should support ceil 3', () => test('{{ "3.5" | ceil }}', '4'));
it('should support ceil 4', () => test('{{ 183.357 | ceil }}', '184')); it('should support ceil 4', () => test('{{ 183.357 | ceil }}', '184'));
it('should support date: %a %b %d %Y', function() { describe('date', function(){
it('should support %a %b %d %Y', function() {
var str = ctx.date.toDateString(); var str = ctx.date.toDateString();
return test('{{ date | date:"%a %b %d %Y"}}', str); return test('{{ date | date:"%a %b %d %Y"}}', str);
}); });
it('should support "now"', function() {
var year = (new Date()).getFullYear();
var src = '{{ "now" | date: "%Y"}}';
return expect(liquid.parseAndRender(src)).to.eventually.match(/\d{4}/);
});
});
it('should support default', () => test('{{false |default: "a"}}', 'a')); it('should support default', () => test('{{false |default: "a"}}', 'a'));
+17
View File
@@ -0,0 +1,17 @@
const chai = require("chai");
const expect = chai.expect;
const _ = require('../../src/util/underscore.js');
describe('util/underscore', function() {
describe('.isString()', function(){
it('should return true for literal string', function(){
expect(_.isString('foo')).to.be.true;
});
it('should return true String instance', function(){
expect(_.isString(new String('foo'))).to.be.true;
});
it('should return false for 123 ', function(){
expect(_.isString(123)).to.be.false;
});
});
});