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
                    });
                }
            }
        }
示例#2
0
 public Action<Stream> this[string templateName, TemplateModel model]
 {
     get
     {
         return builder.RenderTemplate(templateName, model);
     }
 }
示例#3
0
 public void Bind(TemplateModel model)
 {
     From = model.From;
     To = model.To;
     Subject = model.Subject;
     Model = model.Model;
 }
示例#4
0
        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;
        }
示例#6
0
        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;
        }
示例#7
0
 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();
         }
     };
 }
示例#8
0
        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;
 }