- Hi, I'm Rawley. I'm a software developer and self-proclaimed systems administrator
- from Saskatchewan, Canada. I am experienced with a wide variety of technologies, including
- but not limited to OCaml, Clojure, Scheme, GNU/Linux, OpenBSD, C/C++,
- and Java. I am particularily interested in functional programming and
- programming language theory.
-
-
- All of my personal projects are Free Software and can be
- found on my git server or, on my github.
- I spend most of my free time working on personal projects,
- writing blog posts, or listening to bluegrass music.
- To top it all off, I am a free software advocate, digital minimalist, and a full time husband.
-
-
- If you need to contact me, please send me an email.
-
|eos}
- p.slug p.title p.date
+let generate_rss_item (p : BlogPost.t) =
+ Printf.sprintf
+ {eos|
+ %s
+ https://rawley.xyz/blog/%s
+
+ |eos}
+ p.title p.slug
- let generate_rss_item (p : BlogPost.t) =
- Printf.sprintf
- {eos|
- %s
- https://rawley.xyz/blog/%s
-
- |eos}
- p.title p.slug
-
- let handle_error e =
- print_endline (Caqti_error.show e);
- Dream.html ?code:(Some 500) error_template
+let handle_error e =
+ print_endline (Caqti_error.show e);
+ Dream.html ?code:(Some 500) error_template
- let handle_not_found () =
- Dream.html ?code:(Some 404) not_found_template
+let handle_not_found () =
+ Dream.html ?code:(Some 404) not_found_template
- let render_blog_post request =
- let slug = Dream.param request "post" in
- let post_t = Database.get_blog_post_by_slug slug in
- post_t >>= fun post ->
- match post with
- | Error e -> handle_error e
- | Ok p_opt ->
- match p_opt with
- | None -> handle_not_found ()
- | Some p ->
- Printf.sprintf "
%s
\r\n%s" p.title p.content
- |> render_page
- |> Dream.html
+let render_blog_post request =
+ let slug = Dream.param request "post" in
+ let post_t = Database.get_blog_post_by_slug slug in
+ post_t >>= fun post ->
+ match post with
+ | Error e -> handle_error e
+ | Ok p_opt ->
+ match p_opt with
+ | None -> handle_not_found ()
+ | Some p ->
+ Printf.sprintf "
%s
\r\n%s" p.title p.content
+ |> render_page
+ |> Dream.html
- let render_blog_index (_ : Dream.request) =
- let buff = Buffer.create 512 in
- let () = Buffer.add_string buff "
Blog
I have an rss feed too." in
- let posts_t = Database.get_all_blog_posts () in
- posts_t >>= function
- | Error e -> handle_error e
- | Ok posts ->
- List.iter (fun p -> Buffer.add_string buff (generate_link p)) posts;
- let c = if List.length posts <> 0 then
- render_page @@ Buffer.contents buff
- else render_page " No blog posts..." in
- Dream.html c
+let render_blog_index (_ : Dream.request) =
+ let buff = Buffer.create 512 in
+ let () = Buffer.add_string buff "
Blog
I have an rss feed too." in
+ let posts_t = Database.get_all_blog_posts () in
+ posts_t >>= function
+ | Error e -> handle_error e
+ | Ok posts ->
+ List.iter (fun p -> Buffer.add_string buff (generate_link p)) posts;
+ let c = if List.length posts <> 0 then
+ render_page @@ Buffer.contents buff
+ else render_page " No blog posts..." in
+ Dream.html c
- let render_rss_feed (_ : Dream.request) =
- let buff = Buffer.create 512 in
- let add_str = Buffer.add_string buff in
- let () =
- add_str
- {eos|
-
-
- rawley.xyz blog
- Functional programming, math, and philosophy
-
- https://rawley.xyz/static/rawley.xyz.png
- https://rawley.xyz/
- |eos}
- in
- let posts_t = Database.get_all_blog_posts () in
- posts_t >>= function
- | Error e -> handle_error e
- | Ok posts ->
- let () = List.iter (fun t -> generate_rss_item t
- |> html_unescape
- |> add_str) posts
- in
- let () =
- add_str
- {eos|
- |eos}
- in
- Lwt.return @@
- Dream.response
- ~headers:["Content-Type", "text/xml";]
- (Buffer.contents buff)
-end
+let render_rss_feed (_ : Dream.request) =
+ let buff = Buffer.create 512 in
+ let add_str = Buffer.add_string buff in
+ let () =
+ add_str
+ {eos|
+
+
+ rawley.xyz blog
+ Functional programming, math, and philosophy
+
+ https://rawley.xyz/static/rawley.xyz.png
+ https://rawley.xyz/
+ |eos}
+ in
+ let posts_t = Database.get_all_blog_posts () in
+ posts_t >>= function
+ | Error e -> handle_error e
+ | Ok posts ->
+ let () = List.iter (fun t -> generate_rss_item t
+ |> html_unescape
+ |> add_str) posts
+ in
+ let () =
+ add_str
+ {eos|
+ |eos}
+ in
+ Lwt.return @@
+ Dream.response
+ ~headers:["Content-Type", "text/xml";]
+ (Buffer.contents buff)
+
+let render_simple (module R : SimpleRender) =
+ R.render () |> Layout.render |> Dream.html
+
+let render_index () =
+ render_simple (module Index)
diff --git a/render/render.mli b/render/render.mli
index 2e26d02..8887f0f 100644
--- a/render/render.mli
+++ b/render/render.mli
@@ -1,16 +1,18 @@
-open Database
-
-module Render :
- sig
- val not_found_template : string
- val error_template : string
- val header_template : string
- val footer_template : string
- val render_page : string -> string
- val generate_link : BlogPost.t -> string
- val handle_error : [< Caqti_error.t ] -> Dream.response Lwt.t
- val handle_not_found : unit -> Dream.response Lwt.t
- val render_blog_post : Dream.request -> Dream.response Lwt.t
- val render_blog_index : Dream.request -> Dream.response Lwt.t
- val render_rss_feed : Dream.request -> Dream.response Lwt.t
- end
+module BlogPost = Database.BlogPost
+module type SimpleRender = sig val render : unit -> string end
+val header_template : string
+val footer_template : string
+val replace_sequence : string -> string -> string -> string
+val html_unescape : string -> string
+val not_found_template : string
+val error_template : string
+val render_page : string -> string
+val generate_link : BlogPost.t -> string
+val generate_rss_item : BlogPost.t -> string
+val handle_error : [< Caqti_error.t ] -> Dream.response Lwt.t
+val handle_not_found : unit -> Dream.response Lwt.t
+val render_blog_post : Dream.request -> Dream.response Lwt.t
+val render_blog_index : Dream.request -> Dream.response Lwt.t
+val render_rss_feed : Dream.request -> Dream.response Lwt.t
+val render_simple : (module SimpleRender) -> Dream.response Lwt.t
+val render_index : unit -> Dream.response Lwt.t