From 03219a23c1820e7c1bb66695da58eebae1e37b85 Mon Sep 17 00:00:00 2001 From: Chirag Patel Date: Sun, 30 Apr 2017 16:17:13 -0700 Subject: [PATCH] Passing in template name to dust compile. This will ensure when context.getTemplateName is called in a base template the appropriate name is available --- lib/consolidate.js | 7 +++- test/consolidate.js | 1 + test/fixtures/dust/user_template_name.dust | 2 ++ test/shared/dust.js | 38 ++++++++++++++++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 test/fixtures/dust/user_template_name.dust create mode 100644 test/shared/dust.js diff --git a/lib/consolidate.js b/lib/consolidate.js index 8a06431..90dbd79 100644 --- a/lib/consolidate.js +++ b/lib/consolidate.js @@ -383,7 +383,12 @@ exports.dust.render = function(str, options, fn){ }; try { - var tmpl = cache(options) || cache(options, engine.compileFn(str)); + var templateName; + if (options.filename) { + templateName = options.filename.replace(new RegExp('^' + views + '/'), '').replace(new RegExp('\\.' + ext), ''); + } + + var tmpl = cache(options) || cache(options, engine.compileFn(str, templateName)); tmpl(options, fn); } catch (err) { fn(err); diff --git a/test/consolidate.js b/test/consolidate.js index fbcc584..0cc6300 100644 --- a/test/consolidate.js +++ b/test/consolidate.js @@ -19,6 +19,7 @@ require('./shared').test('hogan'); require('./shared/partials').test('hogan'); require('./shared').test('dust'); require('./shared/partials').test('dust'); +require('./shared/dust').test('dust'); require('./shared').test('handlebars'); require('./shared/partials').test('handlebars'); require('./shared/helpers').test('handlebars'); diff --git a/test/fixtures/dust/user_template_name.dust b/test/fixtures/dust/user_template_name.dust new file mode 100644 index 0000000..a738f22 --- /dev/null +++ b/test/fixtures/dust/user_template_name.dust @@ -0,0 +1,2 @@ +

{user.name}

+{@templateName/} diff --git a/test/shared/dust.js b/test/shared/dust.js new file mode 100644 index 0000000..bd2503a --- /dev/null +++ b/test/shared/dust.js @@ -0,0 +1,38 @@ +/*eslint-env node, mocha */ +var cons = require('../../'); +var fs = require('fs'); + +// var should = require('should'); + +exports.test = function(name) { + var user = { name: 'Tobi' }; + + describe(name, function(){ + // Use case: return upper case string. + it('should support fetching template name from the context', function(done) { + var viewsDir = 'test/fixtures/' + name; + var templatePath = viewsDir + '/user_template_name.' + name; + var str = fs.readFileSync(templatePath).toString(); + + var locals = { + user: user, + views: viewsDir, + filename: templatePath + }; + + if (name === 'dust') { + var dust = require('dustjs-helpers'); + dust.helpers.templateName = function(chunk, context, bodies, params) { + return chunk.write(context.getTemplateName()); + }; + cons.requires.dust = dust; + } + + cons[name].render(str, locals, function(err, html){ + if (err) return done(err); + html.should.eql('

Tobi

user_template_name'); + return done(); + }); + }); + }); +};