最小構成TemplateEngineというかただの変数展開

コンストラクタで${変数名}が埋め込まれた文字列を渡してテンプレートを初期化、
mergeメソッドの引数でオブジェクトを渡してやると変数展開する
というだけのもの。

ソース

var MiniTemplate = function(template){
		this.template = eval(['([\'',template.replace(/\$\{([^${}]+)\}/g,'\',{key:\'$1\'},\''),'\'])'].join(''));
	};
MiniTemplate.prototype.merge = function(context){
	var template = this.template || [];
	var temp = [];
	for(var i = 0; i < template.length; i++){
		if(typeof template[i] == 'string'){
			temp.push(template[i]);
		}else if(typeof template[i] == 'object' && typeof template[i]['key'] == 'string'){
			temp.push(context[ template[i]['key'] ]);
		}
	}
	return 	temp.join('');
}

使用例

var hoge = new MiniTemplate('子曰く、${fuga}は${foo}の${bar}を盗んでいきました。');
var piyo = new MiniTemplate('${fuga}は${foo}');
console.log(hoge.merge({'fuga':'魔理沙','foo':'アリス','bar':'大変なもの'}));
//子曰く、魔理沙はアリスの大変なものを盗んでいきました。
console.log(hoge.merge({'fuga':'魔理沙','foo':'パチュリー','bar':'大切な本'}));
//子曰く、魔理沙はパチュリーの大切な本を盗んでいきました。
console.log(piyo.merge({'fuga':'うどんげ','foo':'ぱんつはいてない'}));
//うどんげはぱんつはいてない