From f2691054f86ad45e90eb8473569def04ae3d95cd Mon Sep 17 00:00:00 2001 From: Paul Duncan Date: Thu, 10 Mar 2016 00:22:20 -0500 Subject: add blog test page --- src/guff/handlers/test.cr | 44 +++++++++++- src/guff/post.cr | 2 + src/guff/views/ecrs/test.ecr | 167 +++++++++++++++++++++++++++++++++++++++++++ src/guff/views/html/test.cr | 33 +++++++++ 4 files changed, 243 insertions(+), 3 deletions(-) create mode 100644 src/guff/views/ecrs/test.ecr create mode 100644 src/guff/views/html/test.cr diff --git a/src/guff/handlers/test.cr b/src/guff/handlers/test.cr index f373630..f3ba35c 100644 --- a/src/guff/handlers/test.cr +++ b/src/guff/handlers/test.cr @@ -1,12 +1,50 @@ require "../handler" +require "../views/html/test" class Guff::Handlers::TestHandler < Guff::Handler def call(context : HTTP::Server::Context) - if ((context.request.path || "").match(/^\/test\//)) - context.response.content_type = "text/html" - context.response.puts "test" + case (context.request.path || "") as String + when /^\/test\/?$/ + draw_page(context) + when /^\/test\/set_state$/ + set_state(context) + when /^\/test\/add_post$/ + add_post(context) else call_next(context) end end + + private def draw_page(context) + TestHTMLView.run(@models, context) + end + + private def add_post(context) + params = HTTP::Params.parse(context.request.body as String) + + @models.post.add_post( + name: params["name"].to_s, + slug: params["slug"].to_s, + body: params["body"].to_s, + tags: ["_blog"] + (params["tags"] || "").to_s.split(" "), + ) + + redirect(context) + end + + private def set_state(context) + params = HTTP::Params.parse(context.request.body as String) + + @models.post.update_post( + post_id: params["post_id"].to_i, + state: params["state"].to_s, + ) + + redirect(context) + end + + private def redirect(context) + context.response.status_code = 302 + context.response.headers["location"] = "/test" + end end diff --git a/src/guff/post.cr b/src/guff/post.cr index 3a63163..5aa7170 100644 --- a/src/guff/post.cr +++ b/src/guff/post.cr @@ -2,6 +2,8 @@ require "html" require "ecr/macros" class Guff::Post + getter :row + def initialize(@row : Hash(String, ::SQLite3::Value)) end diff --git a/src/guff/views/ecrs/test.ecr b/src/guff/views/ecrs/test.ecr new file mode 100644 index 0000000..d36b62c --- /dev/null +++ b/src/guff/views/ecrs/test.ecr @@ -0,0 +1,167 @@ +

<%= h(TITLE) %>

+ +<% + [{ + id: "draft", + name: "Draft Posts", + + actions: [{ + id: "posted", + name: "Post", + }, { + id: "deleted", + name: "Delete", + }], + }, { + id: "posted", + name: "Posted", + + actions: [{ + id: "draft", + name: "Draft", + }, { + id: "deleted", + name: "Delete", + }], + }, { + id: "deleted", + name: "Deleted Posts", + + actions: [{ + id: "draft", + name: "Draft", + }], + }].each do |kind| +%> +

<%= + h(kind[:name] as String) + %>

+ + + + + + + + + + + + + <% posts(kind[:id] as String).rows.each do |post| %> + + + + + + + + + + <% (kind[:actions] as Array(Hash(Symbol, String))).each do |a| %> + + <% end %> + + <% end %> +
IDCreated AtNameBodyActions
<%= + h(post.row["post_id"].to_s) + %><%= + h(post.row["created_at"].to_s) + %><%= + h(post.row["name"].to_s) + %><%= + post.row["body"].to_s + %> +
+ + + + + +
+
+<% end %> + +
+
+
+ + + +
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+ + +
+
diff --git a/src/guff/views/html/test.cr b/src/guff/views/html/test.cr new file mode 100644 index 0000000..e31ebdb --- /dev/null +++ b/src/guff/views/html/test.cr @@ -0,0 +1,33 @@ +require "html" +require "ecr/macros" +require "./page" + +class Guff::TestHTMLView + TITLE = "Guff Tests" + + def self.run(models, context : HTTP::Server::Context) + new(models).run(context) + end + + def initialize(@models : Models) + end + + def run(context) + page = PageHTMLView.new(TITLE, self.to_s) + context.response.content_type = page.content_type + context.response.puts page + end + + private def posts(state : String) + @models.post.get_posts( + tags: [["_blog"]], + filters: { state: state } + ) + end + + def h(s : String) + HTML.escape(s || "") + end + + ECR.def_to_s("./src/guff/views/ecrs/test.ecr") +end -- cgit v1.2.3