Просмотр исходного кода

Add templates as Erlang.mk plugin

Loïc Hoguin 8 лет назад
Родитель
Сommit
5838a0c81a
2 измененных файлов с 83 добавлено и 3 удалено
  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
 dep_cowboy_commit = master
 
+DEP_PLUGINS = cowboy
+
 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
 doesn't do anything by default. We still need to tell Cowboy to
 listen for connections.
@@ -119,7 +124,7 @@ HTTP handler.
 Generate a handler from a template:
 
 [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
 the `init/2` function like this to send a reply.
@@ -134,7 +139,7 @@ init(Req0, 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
 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