/[pxelator]/lib/PXElator/CouchDB.pm
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /lib/PXElator/CouchDB.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 207 by dpavlin, Wed Aug 12 22:56:45 2009 UTC revision 485 by dpavlin, Sat Jan 23 19:46:19 2010 UTC
# Line 8  use warnings; Line 8  use warnings;
8  use LWP::UserAgent;  use LWP::UserAgent;
9  use JSON;  use JSON;
10  use Data::Dump qw/dump/;  use Data::Dump qw/dump/;
 use Time::HiRes qw/time/;  
11  use Data::Structure::Util qw(unbless);  use Data::Structure::Util qw(unbless);
12  use Scalar::Util qw/blessed/;  use Scalar::Util qw/blessed/;
13  use Storable qw/dclone/;  use Storable qw/dclone/;
14    use Carp qw/carp/;
15    
16  sub new {  sub new {
17          my ($class, $host, $port, $options) = @_;          my ($class, $host, $port, $options) = @_;
# Line 60  sub request { Line 60  sub request {
60    
61  our $rev;  our $rev;
62    
63    sub rev {
64            my ($self,$url) = @_;
65            my $rev = $rev->{$url};
66            $rev  ||= eval { $self->get( $url )->{_rev} };
67    #       warn "# rev $url $rev";
68            return $rev;
69    }
70    
71  sub delete {  sub delete {
72          my ($self, $url) = @_;          my ($self, $url) = @_;
73    
74          $self->request(DELETE => $url);          $self->request(DELETE => $url . '?rev=' . $self->rev($url) );
75  }  }
76    
77  sub get {  sub get {
# Line 75  sub get { Line 83  sub get {
83  sub put {  sub put {
84          my ($self, $url, $json) = @_;          my ($self, $url, $json) = @_;
85    
86          if ( ! defined $json->{_rev} ) {          $json->{_rev} = $rev->{$url} if defined $rev->{$url};
                 my $old = eval { $self->get( $url )->{_rev} };  
                 $rev->{$url} = $json->{_rev} = $old if defined $old;  
         }  
87    
88          $json = unbless dclone $json if blessed $json;          my $data = dclone $json;
89            $data = unbless $data if blessed $data;
90    
91          $json = JSON->new->utf8->encode( $json ) if $json;  #       warn "# put ",dump( $data );
92    
93          $self->request(PUT => $url, $json);          $json = JSON->new->utf8->encode( $data );
94    
95            carp "# put ",$json;
96    
97            do {
98                    my $json = eval { $self->request(PUT => $url, $json) };
99                    if ( $@ ) {
100                            $rev->{$url} = $self->rev( $url );
101                            warn "refresh rev $url = ", $rev->{$url};
102                    } else {
103                            $rev->{$url} = JSON->new->decode( $json )->{rev};
104                    }
105            } until ! $@;
106  }  }
107    
108  sub post {  sub post {
# Line 95  sub post { Line 113  sub post {
113    
114  our $audit = __PACKAGE__->new;  our $audit = __PACKAGE__->new;
115    
116  sub audit {  sub _store_audit {
117          my $data = pop @_;          my ( $id, $data ) = @_;
118            $audit->put( "pxelator/$id", $data );
         my $url = join(' ', @_);  
         $url =~ s/-\S+//g;  
         $url =~ s/\W+/-/g;  
   
         my ( $package, $file, $line, $sub ) = caller(1);  
         ( $package, undef, $line ) = caller(0) if $package eq 'main';  
   
         my $t = time();  
   
         $data->{x_meta} = {  
                 'time' => $t,  
                 'package' => $package,  
                 'line' => $line,  
                 'sub' => $sub,  
         };  
         $data->{'ident'} = [ @_ ] if @_;  
   
         warn 'audit ', dump($data), "at $file +$line\n";  
   
         $audit->put( "pxelator/$t.$package.$url", $data );  
119  }  }
120    
121  1;  1;

Legend:
Removed from v.207  
changed lines
  Added in v.485

  ViewVC Help
Powered by ViewVC 1.1.26