process method
Evaluates the template into a string result. The template may have multiple expressions which will be concatenated into the returned value.
Implementation
String process({
Map<dynamic, dynamic> context = const {},
List<MemberAccessor<dynamic>> memberAccessors = const [],
}) {
final ctx = <String, Object>{};
for (var entry in context.entries) {
if (entry.key != null && entry.value != null) {
ctx[entry.key.toString()] = entry.value;
}
}
final prepared = _prepare();
var data = prepared.data;
final evaluator = ExpressionEvaluator(
memberAccessors: memberAccessors,
);
for (var entry in prepared.entries) {
try {
final evaled = evaluator.eval(Expression.parse(entry.content), ctx);
data = entry.replace(
data,
evaled == null ? '' : evaled.toString().trim(),
);
} catch (e, stack) {
_logger.severe('Unable to parse input: [${entry.content}]', e, stack);
rethrow;
}
}
return data;
}