aboutsummaryrefslogtreecommitdiffstats
path: root/examples/markdown_middleware/src
diff options
context:
space:
mode:
Diffstat (limited to 'examples/markdown_middleware/src')
-rw-r--r--examples/markdown_middleware/src/markdown_converter.erl29
-rw-r--r--examples/markdown_middleware/src/markdown_middleware.app.src15
-rw-r--r--examples/markdown_middleware/src/markdown_middleware.erl14
-rw-r--r--examples/markdown_middleware/src/markdown_middleware_app.erl29
-rw-r--r--examples/markdown_middleware/src/markdown_middleware_sup.erl23
5 files changed, 110 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" >>.
diff --git a/examples/markdown_middleware/src/markdown_middleware.app.src b/examples/markdown_middleware/src/markdown_middleware.app.src
new file mode 100644
index 0000000..d582399
--- /dev/null
+++ b/examples/markdown_middleware/src/markdown_middleware.app.src
@@ -0,0 +1,15 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+{application, markdown_middleware, [
+ {description, "Cowboy static file handler example with middleware component."},
+ {vsn, "1"},
+ {modules, []},
+ {registered, []},
+ {applications, [
+ kernel,
+ stdlib,
+ cowboy
+ ]},
+ {mod, {markdown_middleware_app, []}},
+ {env, []}
+]}.
diff --git a/examples/markdown_middleware/src/markdown_middleware.erl b/examples/markdown_middleware/src/markdown_middleware.erl
new file mode 100644
index 0000000..49c16dc
--- /dev/null
+++ b/examples/markdown_middleware/src/markdown_middleware.erl
@@ -0,0 +1,14 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+-module(markdown_middleware).
+
+%% API.
+-export([start/0]).
+
+%% API.
+
+start() ->
+ ok = application:start(crypto),
+ ok = application:start(ranch),
+ ok = application:start(cowboy),
+ ok = application:start(markdown_middleware).
diff --git a/examples/markdown_middleware/src/markdown_middleware_app.erl b/examples/markdown_middleware/src/markdown_middleware_app.erl
new file mode 100644
index 0000000..75ad886
--- /dev/null
+++ b/examples/markdown_middleware/src/markdown_middleware_app.erl
@@ -0,0 +1,29 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+%% @private
+-module(markdown_middleware_app).
+-behaviour(application).
+
+%% API.
+-export([start/2]).
+-export([stop/1]).
+
+%% API.
+
+start(_Type, _Args) ->
+ Dispatch = cowboy_router:compile([
+ {'_', [
+ {"/[...]", cowboy_static, [
+ {directory, {priv_dir, markdown_middleware, []}},
+ {mimetypes, {fun mimetypes:path_to_mimes/2, default}}
+ ]}
+ ]}
+ ]),
+ {ok, _} = cowboy:start_http(http, 100, [{port, 8080}], [
+ {env, [{dispatch, Dispatch}]},
+ {middlewares, [cowboy_router, markdown_converter, cowboy_handler]}
+ ]),
+ markdown_middleware_sup:start_link().
+
+stop(_State) ->
+ ok.
diff --git a/examples/markdown_middleware/src/markdown_middleware_sup.erl b/examples/markdown_middleware/src/markdown_middleware_sup.erl
new file mode 100644
index 0000000..4bf71d1
--- /dev/null
+++ b/examples/markdown_middleware/src/markdown_middleware_sup.erl
@@ -0,0 +1,23 @@
+%% Feel free to use, reuse and abuse the code in this file.
+
+%% @private
+-module(markdown_middleware_sup).
+-behaviour(supervisor).
+
+%% API.
+-export([start_link/0]).
+
+%% supervisor.
+-export([init/1]).
+
+%% API.
+
+-spec start_link() -> {ok, pid()}.
+start_link() ->
+ supervisor:start_link({local, ?MODULE}, ?MODULE, []).
+
+%% supervisor.
+
+init([]) ->
+ Procs = [],
+ {ok, {{one_for_one, 10, 10}, Procs}}.