@@ -2,6 +2,26 @@ var regStr = "{{(.+)}}"; | |||
var localRegex = new RegExp(regStr); | |||
var globalRegex = new RegExp(regStr, "g"); | |||
function expectType(type, val) { | |||
if (typeof val !== type) | |||
throw new TypeError("Expected "+type+", got "+typeof val); | |||
} | |||
function expectInstance(obj, val) { | |||
if (!(val instanceof obj)) { | |||
var regex = /function (.+)\(/; | |||
var expectedName = obj.toString().match(regex)[1]; | |||
try { | |||
var realName = val.constructor.toString().match(regex)[1]; | |||
} catch (err) { | |||
var realName = "undefined"; | |||
} | |||
throw new TypeError("Expected "+expectedName+", got "+realName); | |||
} | |||
} | |||
function hasMultipleStatements(str) { | |||
return (str.indexOf(";") !== -1) | |||
} | |||
@@ -12,6 +32,9 @@ function Func(args) { | |||
Func.prototype = Function.prototype; | |||
function Templish(str, vals) { | |||
expectType("string", str); | |||
expectInstance(Array, vals); | |||
str = str.replace(/\s+/g, " ").replace(/}}/g, "}}\n"); | |||
this.string = str; | |||
this.vals = vals; | |||
@@ -48,6 +71,9 @@ function Templish(str, vals) { | |||
} | |||
Templish.prototype.exec = function(vals, cb) { | |||
expectInstance(Object, vals); | |||
expectType("function", cb); | |||
var str = this.string; | |||
//Prepare generic arguments |
@@ -1,10 +1,10 @@ | |||
{ | |||
"name": "templish", | |||
"version": "0.0.2", | |||
"version": "0.0.3", | |||
"description": "HTML templating library for JS", | |||
"main": "index.js", | |||
"scripts": { | |||
"test": "echo \"Error: no test specified\" && exit 1" | |||
"test": "mocha test" | |||
}, | |||
"author": "Martin Dørum Nygaard", | |||
"license": "MIT", |
@@ -0,0 +1,36 @@ | |||
var assert = require("assert"); | |||
var Templish = require("../index.js"); | |||
describe("templish", function() { | |||
it("does basic substitution", function(done) { | |||
var t = new Templish("{{conf.foo}}", ["conf"]); | |||
t.exec({conf: {foo: "bar"}}, function(err, res) { | |||
assert.equal(res, "bar"); | |||
done(err); | |||
}); | |||
}); | |||
it("does basic async substitution", function(done) { | |||
var t = new Templish("{{cb(null, 'hi')}}", []); | |||
t.exec({}, function(err, res) { | |||
assert.equal(res, "hi"); | |||
done(err); | |||
}); | |||
}); | |||
it("does a mix of async and sync substitution", function(done) { | |||
var t = new Templish("{{'a'}} {{cb(null, 'b')}} {{'c'}} {{cb(null, 'd')}}", []); | |||
t.exec({}, function(err, res) { | |||
assert.equal(res, "a b c d"); | |||
done(err); | |||
}); | |||
}); | |||
it("doesn't break when the result of a substitution looks like a template", function(done) { | |||
var t = new Templish("foo: {{foo}}, again: {{foo}}", ["foo"]); | |||
t.exec({foo: "{{foo}}"}, function(err, res) { | |||
assert.equal(res, "foo: {{foo}}, again: {{foo}}"); | |||
done(err); | |||
}); | |||
}); | |||
}); |