Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save KevM/239611 to your computer and use it in GitHub Desktop.

Select an option

Save KevM/239611 to your computer and use it in GitHub Desktop.
public abstract class RuleContextView : AbstractSparkView
{
public IRuleContext Context { get; set; }
public override string ToString()
{
return Context.ToString();
}
}
public interface ITemplateTransformer
{
string TransformFromTemplate(string templateName, IRuleContext ruleContext);
string TransformFromString(string templateContents, IRuleContext ruleContext);
}
public class TemplateTransformer : ITemplateTransformer
{
private readonly EmailSettings _emailSettings;
public TemplateTransformer(EmailSettings emailSettings)
{
_emailSettings = emailSettings;
}
private static ISparkSettings getSparkSettings()
{
return (SparkSectionHandler) ConfigurationManager.GetSection("spark");
}
public string TransformFromTemplate(string templateName, IRuleContext ruleContext)
{
return generateFromView(ruleContext, engine =>
{
var viewFolder = new FileSystemViewFolder(_emailSettings.EmailTemplatePath);
engine.ViewFolder = viewFolder;
var sparkViewDescriptor = new SparkViewDescriptor().AddTemplate(templateName);
var view = (RuleContextView)engine.CreateInstance(sparkViewDescriptor);
return view;
});
}
public string TransformFromString(string templateContents, IRuleContext ruleContext)
{
return generateFromView(ruleContext, engine =>
{
var templateName = templateContents.GetMD5Hash();
var viewFolder = new InMemoryViewFolder
{
{templateName, templateContents}
};
engine.ViewFolder = viewFolder;
var sparkViewDescriptor = new SparkViewDescriptor().AddTemplate(templateName);
var view = (RuleContextView)engine.CreateInstance(sparkViewDescriptor);
return view;
});
}
private static string generateFromView(IRuleContext ruleContext, Func<SparkViewEngine, RuleContextView> viewFactoryFunction)
{
var sparkViewEngine = new SparkViewEngine(getSparkSettings());
var sparkView = viewFactoryFunction(sparkViewEngine);
sparkView.Context = ruleContext;
string output;
using (var writer = new StringWriter())
{
try
{
sparkView.RenderView(writer);
}
finally
{
sparkViewEngine.ReleaseInstance(sparkView);
}
output = writer.ToString();
}
return output;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment