static void BindHeaders(dynamic source, TemplateModel model) { if (HasMember(source, "Subject")) model.Subject = source.Subject; if (HasMember(source, "From")) { var from = source.From; if (HasMember(from, "Name")) model.From.Name = from.Name; if (HasMember(from, "Email")) model.From.Email = from.Email; } if (HasEnumeration(source, "To")) { foreach (var address in source.To) { var name = ""; var email = ""; if (HasMember(address, "Name")) name = address.Name; if (HasMember(address, "Email")) email = address.Email; model.To.Add(new Address { Name = name, Email = email }); } } }
public Action<Stream> this[string templateName, TemplateModel model] { get { return builder.RenderTemplate(templateName, model); } }
public void Bind(TemplateModel model) { From = model.From; To = model.To; Subject = model.Subject; Model = model.Model; }
public Action<Stream> RenderTemplate(string templateName, TemplateModel model) { var location = Templates .FirstOrDefault(l => l.Name == templateName); return location == null ? EmptyView : RenderView(location, model); }
public object Transform(dynamic source) { var model = new TemplateModel(); if (!HasMember(source, "Model")) model.Model = model; else { BindModel(source, model); BindHeaders(source, model); } return model; }
Mailbag GetMailbag(string template, TemplateModel delivery) { var mailbag = new Mailbag(delivery.From, delivery.To, delivery.Subject); using (var buffer = new TextStream()) { Template[template, delivery].Invoke(buffer); mailbag.Contents = buffer.ToString(); } return mailbag; }
Action<Stream> RenderView(Template location, TemplateModel model) { return stream => { var result = engine.CreateView(new TemplateViewFolder(templates), location); using (var writer = new StreamWriter(stream)) { result.View.Bind(model); result.View.Execute(writer); writer.Flush(); } }; }
static TemplateModel GetModel() { var model = new TemplateModel(); model.From.Email = "*****@*****.**"; model.From.Name = "Kermit"; model.To.Add(new Address { Email = "*****@*****.**", Name = "Jim" }); model.Subject = "Message from Kermit via MailPimp"; model.Model = new MuppetModel { Message = "Hey boss, Miss Piggy is smokin' hot!", Muppets = new[] { new Muppet {Name = "Gonzo"}, new Muppet {Name = "Animal"}, new Muppet {Name = "Fozzie"} } }; return model; }
static void BindModel(dynamic source, TemplateModel model) { model.Model = source.Model; }