[erlang-questions] a little meta-programing help

anders conbere <>
Mon Oct 6 00:15:26 CEST 2008


Today I sat down to try to make working with mochiweb a little cleaner
for myself. I wanted a way to specify a list of mappings between url
patterns and methods to be called with the matched variables from
them. I quickly ran into issues with not being able to create patterns
dynamically, and then tried using funs to wrap that functionality but
pretty soon I was back at the same mess I started with.

This is kind of my "if the world were perfect" module (that doesn't
work at all but I hope might show what I was going for).

I was hoping folks might help be think up some ways to handle use
cases like this.

-module(roto_web_routes).
-export([
    call/1
    ]).

-define(VIEWS_MODULE, roto_web_views).

routes() ->
    [
        url(["version"], version),
        url(["register"], register),
        url(["node", NodeName, "messages"], messages),
        url(["node", NodeName, "messages", Id], message),
        url(["node", NodeName, "messages"], subscriptions),
        url(["node", NodeName, "messages", Id], subscriptions)
    ].

url(Pattern, View) ->
    {route, Pattern, View, View}.

url(Pattern, View, Name) ->
    {route, Pattern, View, Name}.

% should take a request, find the matching url config and pass
% the matched variables into the function specified in the url
% config for that entry.
call(Req) ->
    Path = string:tokens(Req:get(path), "/"),
    match_route(Path).

match_route(Path) ->
    %does something fancy with routes() to get to the function
    % I want to call and call it with the matched variables
    ok.

Thanks!
~ Anders



More information about the erlang-questions mailing list