From: Dobrica Pavlinusic Date: Fri, 14 Oct 2011 18:45:05 +0000 (+0200) Subject: working CouchDB view server in perl X-Git-Url: http://git.rot13.org/?p=angular-mojolicious.git;a=commitdiff_plain;h=73263cc2aa4d6bded8e8898861a071b211171594 working CouchDB view server in perl --- diff --git a/couchdb-view-server.pl b/couchdb-view-server.pl index dd1a47a..c210a0a 100755 --- a/couchdb-view-server.pl +++ b/couchdb-view-server.pl @@ -8,6 +8,10 @@ use strict; # # [query_servers] # perl = /usr/bin/perl /srv/angular-mojolicious/couchdb-view-server.pl +# +# example view: +# +# sub { [ undef, shift ] } use JSON::XS; use IO::Handle; @@ -19,15 +23,18 @@ my $in = IO::Handle->new_from_fd(\*STDIN, 'r'); my $out = IO::Handle->new_from_fd(\*STDOUT, 'w'); $out->autoflush(1); +open(my $l_fh, '>', "/tmp/couchdb-perl-view.log"); + sub _log { - $out->print(qq|["log", "@_"]\n|); - warn "# log @_\n"; + $out->print($j->encode([ 'log' => @_ ]), "\n"); + print $l_fh "@_\n"; } our $fun; while(defined(my $line = $in->getline)) { chomp $line; + _log $line if $ENV{DEBUG}; my $input = $j->decode($line); my ($cmd, @args) = @$input; @@ -35,7 +42,7 @@ while(defined(my $line = $in->getline)) { undef $fun; $out->print("true\n"); } elsif ( $cmd eq 'add_fun' ) { - $fun = eval @args; + $fun = eval $args[0]; if ( $@ ) { $out->print( qq|{"error": "$!", "reason": "$@"}\n| ); } else { @@ -43,16 +50,16 @@ while(defined(my $line = $in->getline)) { } } elsif ( $cmd eq 'map_doc' ) { my @results; - our @d; - local @d; - eval { $fun->(@args) }; + our $d; + local $d; + $d = eval { $fun->(@args) }; if ( $@ ) { _log $@; } else { - push @results, [@d]; + push @results, [$d]; } $out->print($j->utf8->encode( \@results ), "\n"); } else { - die "$cmd unimplemented", dump( $input ); + _log "$cmd unimplemented", dump( $input ); } } diff --git a/t/couchdb-view-server.json b/t/couchdb-view-server.json new file mode 100644 index 0000000..b6bf218 --- /dev/null +++ b/t/couchdb-view-server.json @@ -0,0 +1,3 @@ +["reset",{"reduce_limit":true,"timeout":5000}] +["add_fun","sub {\n [ shift->{_id}, 1 ];\n}"] +["map_doc",{"_id":"cb71ad755be66b467ae5e51e4100e027","_rev":"3-11fd6bead394b463531889babc686ac4","trigger":{"active":["t61p:11026","1317673926.10924","1317673926.15453","0"],"output":"","command":"notify-send \"CouchDB trigger notify example\""}}]