Description

Since COUCHDB-815, CouchDB allows nonstandard or unknown HTTP methods in case a _show or similar function may want to implement a response to that method.

Unfortunately the (my) patch in that ticket used couch_util:to_existing_atom which returns the passed value unmodified if it has no corresponding atom. That is wrong because the HTTP method will be copied into the `req` object in the view server, therefore it must not be an Erlang string (list of integers) because those do not JSONify correctly. Instead, if the atom does not exist, the method should be converted to a binary.

Jason Smith
added a comment - 08/Sep/10 16:03 I did not know why an atom was chosen instead of binary in the first place, so I kept the original functionality, only changing for the newer situation.
For one thing, the log message may require changing since right now it says 'GET', 'PUT', etc. so I think that is ~p in the format. It will look pretty bad as <<"GET">>, etc. in the logs.
I will try to use 100% atoms and submit another patch (during/after couchcamp).

Like this, everywhere in the code you know you have to use an atom to match standard methods, an binaries for others.
To me it seems like this it simplifies Erlang code that needs to reference non-standard methods.

Filipe Manana
added a comment - 08/Sep/10 17:46 What I meant is:
Method1 =
case MochiReq:get(method) of
% already an atom
Meth when is_atom(Meth) -> Meth;
% Non standard HTTP verbs aren't atoms (COPY, MOVE etc) so convert when
% possible (if any module references the atom, then it's existing).
Meth -> couch_util:to_binary(Meth)
end,
Like this, everywhere in the code you know you have to use an atom to match standard methods, an binaries for others.
To me it seems like this it simplifies Erlang code that needs to reference non-standard methods.