Group
Extension

Catmandu-Store-Resolver/lib/Catmandu/Store/Resolver/Bag.pm

package Catmandu::Store::Resolver::Bag;

use Moo;
use JSON;

use Catmandu::Sane;
use Catmandu::Store::Resolver::API;

with 'Catmandu::Bag';

has api => (is => 'lazy');

has pid => (is => 'rw');

sub _build_api {
    my $self = shift;
    my $api = Catmandu::Store::Resolver::API->new(
        url => $self->store->url,
        username => $self->store->username,
        password => $self->store->password
    );
    return $api;
}

around add => sub {
    my ($orig, $self, $data) = @_;
    $self->$orig($data);
    $data->{'_id'} = $self->pid;
    return $data;
};

around update => sub {
    my ($orig, $self, $data) = @_;
    $self->$orig($data);
    $data->{'_id'} = $self->pid;
    return $data;
};

sub generator {
    my $self = shift;
}

sub get {
    my ($self, $id) = @_;
    return $self->api->get($id);
}

sub add {
    my ($self, $data) = @_;
    my $response = $self->api->post($data);
    if (defined($response->{'data'}->{'work_pid'})) {
        $self->pid($response->{'data'}->{'work_pid'});
    } else {
        $self->pid($response->{'data'}->{'persistentURIs'}->[0]);
    }
}

sub update {
    my ($self, $id, $data) = @_;
    my $response = $self->api->put($id, $data);
    if (defined($response->{'data'}->{'work_pid'})) {
        $self->pid($response->{'data'}->{'work_pid'});
    } else {
        $self->pid($response->{'data'}->{'persistentURIs'}->[0]);
    }
}

sub delete {
    my ($self, $id) = @_;
    return $self->api->delete($id);
}

sub delete_all {
    my $self = shift;
}

1;

Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.