-
Notifications
You must be signed in to change notification settings - Fork 478
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
{?exists} and {^exists} now supports values from a promise #753
Changes from 3 commits
7a120e6
71fdcdc
dcc36d0
932d5f6
6cc5a3c
337ef1a
c7a4952
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -861,6 +861,17 @@ | |
var body = bodies.block, | ||
skip = bodies['else']; | ||
|
||
if (dust.isThenable(elem)) { | ||
return this.map(function(chunk) { | ||
elem.then(function(data) { | ||
chunk.exists(data, context, bodies).end(); | ||
}, function(err) { | ||
dust.log('Unhandled promise rejection in `' + context.getTemplateName() + '`', INFO); | ||
chunk.renderError(err, context, bodies).end(); | ||
}); | ||
}); | ||
} | ||
|
||
if (!dust.isEmpty(elem)) { | ||
if (body) { | ||
return body(this, context); | ||
|
@@ -876,6 +887,17 @@ | |
var body = bodies.block, | ||
skip = bodies['else']; | ||
|
||
if (dust.isThenable(elem)) { | ||
return this.map(function(chunk) { | ||
elem.then(function(data) { | ||
chunk.notexists(data, context, bodies).end(); | ||
}, function(err) { | ||
dust.log('Unhandled promise rejection in `' + context.getTemplateName() + '`', INFO); | ||
chunk.renderError(err, context, bodies).end(); | ||
}); | ||
}); | ||
} | ||
|
||
if (dust.isEmpty(elem)) { | ||
if (body) { | ||
return body(this, context); | ||
|
@@ -973,24 +995,33 @@ | |
return this.map(function(chunk) { | ||
thenable.then(function(data) { | ||
if (bodies) { | ||
chunk = chunk.section(data, context, bodies); | ||
chunk.section(data, context, bodies).end(); | ||
} else { | ||
// Actually a reference. Self-closing sections don't render | ||
chunk = chunk.reference(data, context, auto, filters); | ||
chunk.reference(data, context, auto, filters).end(); | ||
} | ||
chunk.end(); | ||
}, function(err) { | ||
var errorBody = bodies && bodies.error; | ||
if(errorBody) { | ||
chunk.render(errorBody, context.push(err)).end(); | ||
} else { | ||
dust.log('Unhandled promise rejection in `' + context.getTemplateName() + '`', INFO); | ||
chunk.end(); | ||
} | ||
dust.log('Unhandled promise rejection in `' + context.getTemplateName() + '`', INFO); | ||
chunk.renderError(err, context, bodies).end(); | ||
}); | ||
}); | ||
}; | ||
|
||
/** | ||
* Render an error body if available | ||
* @param thenable {Thenable} the target thenable to await | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. wrong param |
||
* @param context {Context} context to use to render the error | ||
* @param bodies {Object} may optionally contain an "error" which will be rendered | ||
* @return {Chunk} | ||
*/ | ||
Chunk.prototype.renderError = function(err, context, bodies) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nice, good reusable func There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Thanks. Should I move it off of the Chunk object? When I added it originally I wasn't considering that I was updating a public api that's pretty well documented here: http://www.dustjs.com/docs/helper-api/ |
||
var errorBody = bodies && bodies.error; | ||
if (errorBody) { | ||
return this.render(errorBody, context.push(err)); | ||
} | ||
return this; | ||
}; | ||
|
||
/** | ||
* Reserve a chunk to be evaluated with the contents of a streamable. | ||
* Currently an error event will bomb out the stream. Once an error | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could you turn this into a little reusable func that we can use for exists and notexists both? Look above at
getWithResolvedData
as an example-- just a little helper func not attached to the Chunk prototype.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
by "this" I meant the code inside the if() block that is
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The code was definitely redundant between the two methods. I made a
mapThenable
method to address it.