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(); + }); + }); + }); +};