Browse Source

almost complete cowboy 2.5 support

Namdak Tonpa 5 years ago
parent
commit
55a1c7f467
2 changed files with 12 additions and 7 deletions
  1. 10 5
      src/rest_cowboy.erl
  2. 2 2
      src/users.erl

+ 10 - 5
src/rest_cowboy.erl

@@ -22,13 +22,14 @@ rest_init(Req, _Opts) ->
     io:format("REST INIT~p"),
     {ok, Req4, #st{resource_module = Module, resource_id = Id}}.
 
-resource_exists(#{bindings := #{resource := _}} = Req, State) -> {false, Req, State};
-resource_exists(#{bindings := #{id := _}} = Req, State) -> {true, Req, State};
 resource_exists(#{bindings := #{resource := Module, id := Id}} = Req, State) ->
     M = c(Module),
-    {M:exists(Id), Req, State}.
+    io:format("EXISTS: ~p dymamic: ~p~n",[Id,M:exists(Id)]),
+    {M:exists(Id), Req, State};
+resource_exists(#{bindings := #{resource := _}} = Req, State) -> io:format("EXISTS: false~n"), {false, Req, State};
+resource_exists(#{bindings := #{id := _}} = Req, State) -> io:format("EXISTS: true~n"), {true, Req, State}.
 
-allowed_methods(Req, #st{resource_id = <<"undefined">>} = State) -> {[<<"GET">>, <<"POST">>], Req, State};
+%allowed_methods(Req, #st{resource_id = <<"undefined">>} = State) -> {[<<"GET">>, <<"POST">>], Req, State};
 allowed_methods(Req, State)                                -> {[<<"GET">>, <<"PUT">>, <<"DELETE">>], Req, State}.
 
 content_types_provided(#{bindings := #{resource := Module}} = Req, State) ->
@@ -98,8 +99,10 @@ default_put(Mod, Id, Data, Req) when is_map(Data) -> default_put(Mod, Id, maps:t
 default_put(Mod, Id, Data, Req) ->
     NewRes = Mod:from_json(Data, Mod:get(Id)),
     NewId = proplists:get_value(id, Mod:to_json(NewRes)),
+    io:format("Id ~p NewId ~p~n",[Id,NewId]),
     case Id =/= NewId of
-        true  -> Mod:delete(Id);
+        true when Id =:= [] -> skip;
+        true -> Mod:delete(Id);
         false -> true end,
     Mod:post(NewRes).
 
@@ -117,8 +120,10 @@ validate_match(_Mod,  Id, true, Id)      -> true;
 validate_match( Mod, _Id, true, NewId)   -> not Mod:exists(NewId);
 validate_match(   _,         _,    _, _) -> false.
 
+delete_resource(#{bindings := #{resource := Module, id := []}} = Req, State) -> {[], Req, State};
 delete_resource(#{bindings := #{resource := Module, id := Id}} = Req, State) ->
    M = c(Module),
+   io:format("DELETE: ~p ~p ~p~n",[M,Id,M:delete(Id)]),
    {M:delete(Id), Req, State}.
 
 rest_module(Module) when is_binary(Module) -> rest_module(binary_to_list(Module));

+ 2 - 2
src/users.erl

@@ -6,9 +6,9 @@
 
 init()               -> ets:new(users, [public, named_table, {keypos, #user.id}]).
 populate(Users)      -> ets:insert(users, Users).
-exists(Id)           -> ets:member(users, n2o:to_binary(Id)).
+exists(Id)           -> X = ets:member(users, binary_to_list(Id)), io:format("Member: ~p~n",[X]), X.
 get()                -> ets:tab2list(users).
 get(Id)              -> #user{id=Id}.
-delete(Id)           -> ets:delete(users, n2o:to_binary(Id)).
+delete(Id)           -> ets:delete(users, binary_to_list(Id)).
 post(#user{} = User) -> ets:insert(users, User);
 post(Data)           -> post(from_json(Data, #user{})).