Group
Extension

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

package Catmandu::Store::Datahub::Bag;

use Moo;
use Scalar::Util qw(reftype);
use LWP::UserAgent;
use Catmandu::Util qw(is_string require_package);
use Time::HiRes qw(usleep);
use Catmandu::Sane;
use Catmandu::Store::Datahub::API;
use JSON;

with 'Catmandu::Bag';

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

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

##
# before add in ::Bag creates a _id tag, which is useful for hashes and NoSQL-dbs, but breaks our
# XML conversion. You *can* remove it in your add/update function, but that feels unclean.
# You cannot use before add here to remove the _id, as this one is added before the before add
# from ::Bag (see http://search.cpan.org/~ether/Moose-2.1806/lib/Moose/Manual/MethodModifiers.pod).
# But around is called last. So we use it here.
around add => sub {
    my $orig = shift;
    my ($self, $data) = @_;
    delete $data->{'_id'};
    return $self->$orig($data);
};

sub generator {
    my $self = shift;
    # api/v1/data -> results ; not paginated
    my $stack = $self->api->list()->{'results'};
    return sub {
        return pop @{$stack};
    };
}

sub each {
    my ($self, $sub) = @_;
    my $n = 0;
    my $stack = $self->api->list()->{'results'};
    while (my $item = pop @{$stack}) {
        $sub->($item);
        $n++;
    }
    return $n;
}


##
# Return a record identified by $id
sub get {
    my ($self, $id) = @_;
    return $self->api->get($id);
}

##
# Create a new record
sub add {
    my ($self, $data) = @_;
    return $self->api->update($data->{'id'}, $data->{'_'});
}

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

sub delete_all {}

1;

__END__


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