use LWP::UserAgent;
use JSON;
use Data::Dump qw/dump/;
+use Time::HiRes qw/time/;
+use Data::Structure::Util qw(unbless);
+use Scalar::Util qw/blessed/;
+use Storable qw/dclone/;
sub new {
my ($class, $host, $port, $options) = @_;
sub get {
my ($self, $url) = @_;
- from_json $self->request(GET => $url);
+ JSON->new->utf8->decode( $self->request(GET => $url) );
}
sub put {
my ($self, $url, $json) = @_;
warn "put $url ",dump($json);
- $rev->{$url} ||= eval { $self->get( $url )->{_rev} };
+ if ( ! defined $json->{_rev} ) {
+ my $old = eval { $self->get( $url )->{_rev} };
+ $rev->{$url} = $json->{_rev} = $old if defined $old;
+ }
- $json->{_rev} = $rev->{$url} if $rev->{$url};
+ $json = unbless dclone $json if blessed $json;
- $json = to_json $json if $json;
+ $json = JSON->new->utf8->encode( $json ) if $json;
$self->request(PUT => $url, $json);
}
$self->request(POST => $url, $json);
}
+our $audit = __PACKAGE__->new;
+
+sub audit {
+ my $data = pop @_;
+
+ my $url = join(' ', @_);
+ $url =~ s/-\S+//g;
+ $url =~ s/\W+/-/g;
+
+ my ( $package, undef, $line, $sub ) = caller(1);
+ ( $package, undef, $line ) = caller(0) if $package eq 'main';
+
+ $data->{x_meta} = {
+ 'ident' => [ @_ ],
+ 'time' => time(),
+ 'package' => $package,
+ 'line' => $line,
+ 'sub' => $sub,
+ };
+
+ $audit->put( "pxelator/$package.$url", $data );
+}
+
1;
use strict;
use autodie;
-use Test::More tests => 4;
+use Test::More tests => 5;
use Data::Dump qw/dump/;
use_ok 'CouchDB';
#ok( $db->delete( "$db" ), 'delete' );
+ok( $db->audit( 'test', { foo => 42, bar => 'baz' }), 'audit' );