0
Fork 0
mirror of https://github.com/ninenines/cowboy.git synced 2025-07-14 12:20:24 +00:00

Add templates as Erlang.mk plugin

This commit is contained in:
Loïc Hoguin 2016-12-28 17:54:50 +01:00
parent f7094ad78f
commit 5838a0c81a
No known key found for this signature in database
GPG key ID: 71366FF21851DF03
2 changed files with 83 additions and 3 deletions

View file

@ -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
plugins.mk Normal file
View file

@ -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