Browse Source

Add templates as Erlang.mk plugin

Loïc Hoguin 8 years ago
parent
commit
5838a0c81a
2 changed files with 83 additions and 3 deletions
  1. 8 3
      doc/src/guide/getting_started.asciidoc
  2. 75 0
      plugins.mk

+ 8 - 3
doc/src/guide/getting_started.asciidoc

@@ -71,10 +71,15 @@ PROJECT = hello_erlang
 DEPS = cowboy
 DEPS = cowboy
 dep_cowboy_commit = master
 dep_cowboy_commit = master
 
 
+DEP_PLUGINS = cowboy
+
 include erlang.mk
 include erlang.mk
 ----
 ----
 
 
-If you run `make run` now, Cowboy will be included in the release
+We also tell the build system to load the plugins Cowboy provides.
+These include predefined templates that we will use soon.
+
+If you do `make run` now, Cowboy will be included in the release
 and started automatically. This is not enough however, as Cowboy
 and started automatically. This is not enough however, as Cowboy
 doesn't do anything by default. We still need to tell Cowboy to
 doesn't do anything by default. We still need to tell Cowboy to
 listen for connections.
 listen for connections.
@@ -119,7 +124,7 @@ HTTP handler.
 Generate a handler from a template:
 Generate a handler from a template:
 
 
 [source,bash]
 [source,bash]
-$ make new t=cowboy_http n=hello_handler
+$ make new t=cowboy.http n=hello_handler
 
 
 Then, open the 'src/hello_handler.erl' file and modify
 Then, open the 'src/hello_handler.erl' file and modify
 the `init/2` function like this to send a reply.
 the `init/2` function like this to send a reply.
@@ -134,7 +139,7 @@ init(Req0, State) ->
     {ok, Req, State}.
     {ok, Req, State}.
 ----
 ----
 
 
-What the above code does is send a `200 OK` reply, with the
+What the above code does is send a 200 OK reply, with the
 Content-type header set to `text/plain` and the response
 Content-type header set to `text/plain` and the response
 body set to `Hello Erlang!`.
 body set to `Hello Erlang!`.
 
 

+ 75 - 0
plugins.mk

@@ -0,0 +1,75 @@
+# See LICENSE for licensing information.
+
+# Plain HTTP handlers.
+define tpl_cowboy.http
+-module($(n)).
+-behavior(cowboy_handler).
+
+-export([init/2]).
+
+init(Req, State) ->
+	{ok, Req, State}.
+endef
+
+# Loop handlers.
+define tpl_cowboy.loop
+-module($(n)).
+-behavior(cowboy_loop).
+
+-export([init/2]).
+-export([info/3]).
+
+init(Req, State) ->
+	{cowboy_loop, Req, State, 5000, hibernate}.
+
+info(_Info, Req, State) ->
+	{ok, Req, State, hibernate}.
+endef
+
+# REST handlers.
+define tpl_cowboy.rest
+-module($(n)).
+-behavior(cowboy_rest).
+
+-export([init/2]).
+-export([content_types_provided/2]).
+-export([to_html/2]).
+
+init(Req, State) ->
+	{cowboy_rest, Req, State}.
+
+content_types_provided(Req, State) ->
+	{[
+		{{<<"text">>, <<"html">>, '*'}, to_html}
+	], Req, State}.
+
+to_html(Req, State) ->
+	{<<"<html><body>This is REST!</body></html>">>, Req, State}.
+endef
+
+# Websocket handlers.
+define tpl_cowboy.ws
+-module($(n)).
+-behavior(cowboy_websocket).
+
+-export([init/2]).
+-export([websocket_init/1]).
+-export([websocket_handle/2]).
+-export([websocket_info/2]).
+
+init(Req, State) ->
+	{cowboy_websocket, Req, State}.
+
+websocket_init(State) ->
+	{ok, State}.
+
+websocket_handle({text, Data}, State) ->
+	{reply, {text, Data}, State};
+websocket_handle({binary, Data}, State) ->
+	{reply, {binary, Data}, State};
+websocket_handle(_Frame, State) ->
+	{ok, State}.
+
+websocket_info(_Info, State) ->
+	{ok, State}.
+endef