aboutsummaryrefslogtreecommitdiffstats
path: root/examples/markdown_middleware/src/markdown_converter.erl
diff options
context:
space:
mode:
Diffstat (limited to 'examples/markdown_middleware/src/markdown_converter.erl')
-rw-r--r--examples/markdown_middleware/src/markdown_converter.erl29
1 files changed, 29 insertions, 0 deletions
diff --git a/examples/markdown_middleware/src/markdown_converter.erl b/examples/markdown_middleware/src/markdown_converter.erl
new file mode 100644
index 0000000..24bb132
--- /dev/null
+++ b/examples/markdown_middleware/src/markdown_converter.erl
@@ -0,0 +1,29 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+-module(markdown_converter).
+-behaviour(cowboy_middleware).
+
+-export([execute/2]).
+
+execute(Req, Env) ->
+ {[Path], Req1} = cowboy_req:path_info(Req),
+ case filename:extension(Path) of
+ <<".html">> -> maybe_generate_markdown(resource_path(Path));
+ _Ext -> ok
+ end,
+ {ok, Req1, Env}.
+
+maybe_generate_markdown(Path) ->
+ ModifiedAt = filelib:last_modified(source_path(Path)),
+ GeneratedAt = filelib:last_modified(Path),
+ case ModifiedAt > GeneratedAt of
+ true -> erlmarkdown:conv_file(source_path(Path), Path);
+ false -> ok
+ end.
+
+resource_path(Path) ->
+ {ok, Cwd} = file:get_cwd(),
+ filename:join([Cwd, "priv", Path]).
+
+source_path(Path) ->
+ << (filename:rootname(Path))/binary, ".md" >>.