Skip to content

Instantly share code, notes, and snippets.

@dmitriid
Created July 17, 2009 09:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dmitriid/148978 to your computer and use it in GitHub Desktop.
Save dmitriid/148978 to your computer and use it in GitHub Desktop.
%%
%% передаем в stack ewgi-контекст и список миддлварей таким оразом:
%%
%% stack(Ctx, [
%% module1,
%% module2,
%% {module3, [Option1, Option2]
%% ])
%%
%% миддлварь должна реализовывать run/2 или run/3 таким образом
%%
%% run(EwgiContext, App) ->
%% App(EwgiContext).
%%
%% run(EwgiContext, App, Options) ->
%% App(EwgiContext).
%%
%% То есть если надо отмодифицировать ewgi_context и передать его дальше
%% или получить ewgi_context, модифицировать его и вернуть или нифига не делать :)
stack(Ctx, []) ->
Ctx;
stack(Ctx, [Middleware|T]) ->
F = fun(C) ->
stack(C, T)
end,
io:format("Middleware: ~p~n", [Middleware]),
run(Middleware, Ctx, F).
run(Module, Ctx, F) when is_atom(Module) ->
Module:run(Ctx, F, 0);
run({Module}, Ctx, F) ->
Module:run(Ctx, F);
run({Module, Options}, Ctx, F) ->
Module:run(Ctx, F, Options).
%%%
%%% пример миддлвари
%%%
-module(dummy).
-export([run/2, run/3]).
run(Ctx, App) ->
io:format("Dummy!!!!!~n"),
App(Ctx).
run(Ctx, App, Opts) ->
io:format("Dummy ~p~n", [Opts]),
App(Ctx).
%%% то есть в stack можно передать stack(Ctx, [dummy, {dummy, "hello"}]) и т.п.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment