X-Git-Url: http://git.rot13.org/?p=angular-mojolicious.git;a=blobdiff_plain;f=couchdb-view-server.pl;h=cc64570cbd81916b4f4f13fed5ae54b117357d79;hp=c210a0af4121d2f93e5af1764cd85b7f61898a3d;hb=HEAD;hpb=73263cc2aa4d6bded8e8898861a071b211171594;ds=sidebyside diff --git a/couchdb-view-server.pl b/couchdb-view-server.pl index c210a0a..cc64570 100755 --- a/couchdb-view-server.pl +++ b/couchdb-view-server.pl @@ -23,26 +23,30 @@ 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"); +open(my $l_fh, '>>', "/tmp/couchdb-perl-view.log"); +$l_fh->autoflush(1); + +sub _debug { + print $l_fh "@_\n"; +} sub _log { $out->print($j->encode([ 'log' => @_ ]), "\n"); - print $l_fh "@_\n"; } -our $fun; +our @fun; while(defined(my $line = $in->getline)) { chomp $line; - _log $line if $ENV{DEBUG}; + _debug $line; my $input = $j->decode($line); my ($cmd, @args) = @$input; if ( $cmd eq 'reset' ) { - undef $fun; + @fun = (); $out->print("true\n"); } elsif ( $cmd eq 'add_fun' ) { - $fun = eval $args[0]; + push @fun, eval $args[0]; if ( $@ ) { $out->print( qq|{"error": "$!", "reason": "$@"}\n| ); } else { @@ -50,15 +54,14 @@ while(defined(my $line = $in->getline)) { } } elsif ( $cmd eq 'map_doc' ) { my @results; - our $d; - local $d; - $d = eval { $fun->(@args) }; - if ( $@ ) { - _log $@; - } else { + foreach my $fun ( @fun ) { + my $d = eval { $fun->(@args) }; + _log $@ if $@; push @results, [$d]; } - $out->print($j->utf8->encode( \@results ), "\n"); + my $json = $j->utf8->encode( \@results ); + $out->print("$json\n"); + _debug "# $json"; } else { _log "$cmd unimplemented", dump( $input ); }