示例#1
0
        public async Task<ActionResult> Save(string slug, PostViewModel postViewModel)
        {
            var result = await Resolve<SavePostCommand>().Execute(slug, postViewModel);

            var routeParameters = BuildRouteParametersForPost(result.Slug, result.Version);

            if (Request.IsAjaxRequest())
            {
                return Json(new { status = "ok", location = Url.Action("Show", routeParameters) });
            }

            return RedirectToAction("Show", routeParameters);
        }
示例#2
0
        public ActionResult Index()
        {
            var viewModel = new PostViewModel();

            var builder = new StringBuilder();
            builder.AppendLine("// The value returned is displayed in the results panel below");
            builder.AppendLine("return \"Hello, world!\";");
            var code = builder.ToString();

            viewModel.Post.Content = code;

            viewModel.Errors = compiler.GetCompilationErrors(code);
            return View("Show", viewModel);
        }
示例#3
0
        public ActionResult Index()
        {
            var classesBuilder = new StringBuilder();

            classesBuilder.AppendLine("public interface IPerson");
            classesBuilder.AppendLine("{");
            classesBuilder.AppendLine("    string Name { get; }");
            classesBuilder.AppendLine();
            classesBuilder.AppendLine("    string Greet();");
            classesBuilder.AppendLine("}");
            classesBuilder.AppendLine();
            classesBuilder.AppendLine("class Person : IPerson");
            classesBuilder.AppendLine("{");
            classesBuilder.AppendLine("    public Person(string name)");
            classesBuilder.AppendLine("    {");
            classesBuilder.AppendLine("        Name = name;");
            classesBuilder.AppendLine("    }");
            classesBuilder.AppendLine();
            classesBuilder.AppendLine("    public string Name { get; private set; }");
            classesBuilder.AppendLine();
            classesBuilder.AppendLine("    public string Greet()");
            classesBuilder.AppendLine("    {");
            classesBuilder.AppendLine("        if (Name == null)");
            classesBuilder.AppendLine("            return \"Hello, stranger!\";");
            classesBuilder.AppendLine();
            classesBuilder.AppendLine("        return string.Format(\"Hello, {0}!\", Name);");
            classesBuilder.AppendLine("    }");
            classesBuilder.AppendLine("}");

            var commandBuilder = new StringBuilder();

            commandBuilder.AppendLine("IPerson person = new Person(name: null);");
            commandBuilder.AppendLine("");
            commandBuilder.AppendLine("return person.Greet();");

            var post = new Post { Content = commandBuilder.ToString(), Classes = classesBuilder.ToString() };

            var viewModel = new PostViewModel
                            {
                                Post = post,
                                Errors = compiler.GetCompilationErrors(post.Content, post.Classes)
                            };

            return View("Show", viewModel);
        }
示例#4
0
        public ActionResult Index()
        {
            var post = BuildSamplePost();

            var errors = compiler.GetCompilationErrors(post)
                                 .Select(x => new EditorError
                                              {
                                                  Location = x.Location.GetLineSpan(true),
                                                  Message = x.Info.GetMessage()
                                              });

            var viewModel = new PostViewModel(post)
                            {
                                Errors = errors
                            };

            return View("Show", viewModel);
        }
示例#5
0
        public static PostViewModel Create(Post post)
        {
            if (post == null)
            {
                return null;
            }

            var model = new PostViewModel
                        {
                            Slug = post.Slug,
                            Version = post.Version,
                            AuthorId = post.AuthorId,
                            Documents = post.Documents
                               .Select(doc => new DocumentModel { Name = doc.Name, Text = doc.GetText() })
                               .ToArray()
                        };

            return model;
        }
        public void Validate_returns_JsonResult()
        {
            var viewModel = new PostViewModel();
            var mockValidator = new Mock<ICodeValidator>();
            var repository = Mock.Of<IPostRepository>();

            mockValidator.Setup(x => x.GetCompilationErrors(It.IsAny<Post>()));

            var controller = new HomeController(repository, mockValidator.Object);

            var result = controller.Validate(viewModel) as JsonResult;

            Assert.NotNull(result);
            mockValidator.Verify(x => x.GetCompilationErrors(It.IsAny<Post>()), Times.Once());
        }
        public void Save_returns_redirect_to_Show()
        {
            var postViewModel = new PostViewModel();
            var validator = Mock.Of<ICodeValidator>();
            var mockRepository = new Mock<IPostRepository>();

            mockRepository.Setup(x => x.Save(It.IsAny<string>(), It.IsAny<Post>())).Returns<string, Post>((s, x) => x);

            var controller = new HomeController(mockRepository.Object, validator);

            var result = controller.Save(null, postViewModel) as RedirectToRouteResult;

            Assert.NotNull(result);
        }
示例#8
0
        public ActionResult Show(string slug, int? version)
        {
            if (version <= 1)
            {
                // Redirect the user to /:slug instead of /:slug/1
                return RedirectToActionPermanent("Show", "Home", new { slug = slug, version = (int?)null });
            }

            version = version ?? 1;
            var post = db.GetVersion(slug, version.Value);

            if (post == null)
            {
                return PostNotFound();
            }

            var errors = compiler.GetCompilationErrors(post)
                                 .Select(x => new EditorError
                                              {
                                                  Location = x.Location.GetLineSpan(true),
                                                  Message = x.Info.GetMessage()
                                              });

            var viewModel = new PostViewModel(post)
                            {
                                Errors = errors
                            };

            if (Request.IsAjaxRequest())
            {
                return Json(new { status = "ok", data = viewModel }, JsonRequestBehavior.AllowGet);
            }

            return View("Show", viewModel);
        }
示例#9
0
 public ActionResult Validate(PostViewModel postViewModel)
 {
     var errors = Resolve<ErrorsInPostQuery>().Execute(postViewModel.ToPost());
     return Json(new { status = "ok", data = errors });
 }
示例#10
0
        public ActionResult Show(string slug, int? version)
        {
            if (version <= 1)
            {
                // Redirect the user to /:slug instead of /:slug/1
                return RedirectToActionPermanent("Show", "Home", new { slug = slug, version = (int?)null });
            }

            var content = db.GetVersion(slug, version ?? 1);

            if (content == null)
            {
                return HttpNotFound();
            }

            var viewModel = new PostViewModel
            {
                Post = content,
                Errors = compiler.GetCompilationErrors(content.Content)
            };

            if (Request.IsAjaxRequest())
            {
                return Json(new { status = "ok", data = viewModel }, JsonRequestBehavior.AllowGet);
            }

            return View("Show", viewModel);
        }
示例#11
0
        public ActionResult Show(string slug, int? version)
        {
            if (version <= 1)
            {
                // Redirect the user to /:slug instead of /:slug/1
                return RedirectToActionPermanent("Show", "Home", new { slug = slug, version = (int?)null });
            }

            version = version ?? 1;
            var post = db.GetVersion(slug, version.Value);

            if (post == null)
            {
                Response.StatusCode = 404;
                ViewBag.Message = string.Format("code snippet of '{0}' ver. {1} was not found.", slug, version.Value);
                return View("Error");
            }

            var viewModel = new PostViewModel
                            {
                                Post = post,
                                Errors = compiler.GetCompilationErrors(post.Content, post.Classes)
                            };

            if (Request.IsAjaxRequest())
            {
                return Json(new { status = "ok", data = viewModel }, JsonRequestBehavior.AllowGet);
            }

            return View("Show", viewModel);
        }
示例#12
0
        public Task<Post> Execute(string slug, PostViewModel postViewModel)
        {
            var result = posts.Save(slug, postViewModel.ToPost());

            return Task.FromResult(result);
        }