summaryrefslogtreecommitdiff
path: root/test/view_server/run_native_process.es
diff options
context:
space:
mode:
Diffstat (limited to 'test/view_server/run_native_process.es')
-rwxr-xr-xtest/view_server/run_native_process.es55
1 files changed, 55 insertions, 0 deletions
diff --git a/test/view_server/run_native_process.es b/test/view_server/run_native_process.es
new file mode 100755
index 00000000..dfdc423e
--- /dev/null
+++ b/test/view_server/run_native_process.es
@@ -0,0 +1,55 @@
+#! /usr/bin/env escript
+
+% Licensed under the Apache License, Version 2.0 (the "License"); you may not
+% use this file except in compliance with the License. You may obtain a copy of
+% the License at
+%
+% http://www.apache.org/licenses/LICENSE-2.0
+%
+% Unless required by applicable law or agreed to in writing, software
+% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+% License for the specific language governing permissions and limitations under
+% the License.
+
+read() ->
+ case io:get_line('') of
+ eof -> stop;
+ Data -> mochijson2:decode(Data)
+ end.
+
+send(Data) when is_binary(Data) ->
+ send(binary_to_list(Data));
+send(Data) when is_list(Data) ->
+ io:format(Data ++ "\n", []).
+
+write(Data) ->
+ case (catch mochijson2:encode(Data)) of
+ {json_encode, Error} -> write({[{<<"error">>, Error}]});
+ Json -> send(Json)
+ end.
+
+%log(Mesg) ->
+% log(Mesg, []).
+%log(Mesg, Params) ->
+% io:format(standard_error, Mesg, Params).
+
+loop(Pid) ->
+ case read() of
+ stop -> ok;
+ Json ->
+ case (catch couch_native_process:prompt(Pid, Json)) of
+ {error, Reason} ->
+ ok = write({[{error, Reason}]});
+ Resp ->
+ ok = write(Resp),
+ loop(Pid)
+ end
+ end.
+
+main([]) ->
+ code:add_pathz("src/couchdb"),
+ code:add_pathz("src/mochiweb"),
+ {ok, Pid} = couch_native_process:start_link(),
+ loop(Pid).
+