ArangoDB2

 view release on metacpan or  search on metacpan

lib/ArangoDB2/Index.pm  view on Meta::CPAN

package ArangoDB2::Index;

use strict;
use warnings;

use base qw(
    ArangoDB2::Base
);

use Data::Dumper;
use JSON::XS;

# parameters that can be set when creating index or
# are returned when creating/getting index
our @PARAMS = qw(
    byteSize constraint fields geoJson id ignoreNull
    isNewlyCreated minLength size type unique
);

my $JSON = JSON::XS->new->utf8;



# byteSize
#
# get/set byteSize
sub byteSize { shift->_get_set('byteSize', @_) }

# constraint
#
# get/set constraint value
sub constraint { shift->_get_set_bool('constraint', @_) }

# create
#
# POST /_api/index
sub create
{
    my($self, $index, $args) = @_;
    # require index
    die "Invalid Args"
        unless ref $index eq 'HASH';
    # process args
    $args = $self->_build_args($args, \@PARAMS);
    # set collection name
    $args->{collection} = $self->collection->name;
    # make request
    my $res = $self->arango->http->post(
        $self->api_path('index'),
        $args,
        $JSON->encode($index),
    ) or return;
    # get name from id
    my($name) = $res->{id} =~ m{/(\d+)$}
        or return;
    $self->{name} = $name;
    # copy response data to instance
    $self->_build_self($res, \@PARAMS);
    # register
    $self->collection->indexes->{$name} = $self;

    return $self;
}

# delete
#
# DELETE /_api/index/{index-handle}
sub delete
{
    my($self) = @_;
    # make request
    my $res = $self->arango->http->delete(
        $self->api_path('index', $self->id),
    ) or return;
    # remove from register
    delete $self->collection->indexes->{$self->name};

    return $res;
}



( run in 1.113 second using v1.01-cache-2.11-cpan-39bf76dae61 )