src/webmachine_bridge_modules/webmachine_simple_bridge_anchor.erl

%% vim: ts=4 sw=4 et sts=4
-module(webmachine_simple_bridge_anchor).
-include("simple_bridge.hrl").
-export([
    init/1, 
    to_html/2, 
    allowed_methods/2,
    post_is_create/2,
    process_post/2,
    ping/2
]).


%% Resource Functions %%

ping(Req, State) ->
    {pong, Req, State}.

init(_Handler = Handler) -> 
    {ok, Handler}.

allowed_methods(Req, Handler) -> 
    {['HEAD', 'GET', 'POST'], Req, Handler}.

post_is_create(Req, Handler) -> 
    {false, Req, Handler}.

to_html(Req, Handler) ->
    {ok, Data, Req1} = do_bridge(Handler, Req),
    {Data, Req1, Handler}.

process_post(Req, Handler) ->
    {ok, Data, Req1} = do_bridge(Handler, Req),
    Req2 = wrq:set_resp_body(Data, Req1),
    {true, Req2, Handler}.

do_bridge(Handler, Req) ->
    Bridge = simple_bridge:make(webmachine, Req),
    case simple_bridge_websocket:attempt_hijacking(Bridge, Handler) of
        {hijacked, closed} ->
            mochiweb_socket:close(sbw:socket(Bridge)),
            {ok, "", Req};
        {hijacked, Bridge2} ->
            sbw:build_response(Bridge2);
        spared ->
            Handler:run(Bridge)
    end.