extract x_sync handling and introduce persistant x_meta
authorDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 2 Aug 2012 14:06:33 +0000 (16:06 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Thu, 2 Aug 2012 14:06:33 +0000 (16:06 +0200)
CouchDB.pm

index c2c9cda..016a7d8 100644 (file)
@@ -86,6 +86,18 @@ sub post {
   $self->request(POST => $url, $json);
 }
 
+sub x_sync {
+       my ($json,$old) = @_;
+       $json->{$_} = $old->{$_} foreach keys %{ $old->{x_meta} }; # special persistent x_meta fields
+       my $json_md5 = md5_hex encode_json $json;
+       $json->{x_sync}->{json_md5} = $json_md5;
+       my $o =  $old->{x_sync}->{json_md5};
+       my $n = $json->{x_sync}->{json_md5};
+       warn "## x_sync $o ", $o eq $n ? '==' : '!=', " $n\n";
+       return $json;
+}
+
+
 sub modify {
        my ($self, $url, $json) = @_;
 
@@ -104,11 +116,9 @@ sub modify {
                        $json->{_rev} = $old->{_rev};
                }
 
-               my $json_md5 = md5_hex encode_json $json;
-               $json->{x_sync}->{json_md5} = $json_md5;
+               $json = x_sync($json, $old);
 
-               warn "# json_md5 $json_md5 == $old->{x_sync}->{json_md5}\n";
-               if ( $json_md5 ne $old->{x_sync}->{json_md5} ) {
+               if ( $json->{x_sync}->{json_md5} ne $old->{x_sync}->{json_md5} ) {
                        warn "# modify $url";
                        $ret = $self->put( $url => $json );
                } else {
@@ -118,6 +128,9 @@ sub modify {
                }
        } else {
                $json = $json->({}) if ref $json eq 'CODE';
+
+               $json = x_sync($json);
+
                warn "# insert $url ", dump($json);
                $ret = $self->put( $url => $json );
        }