ArangoDB

 view release on metacpan or  search on metacpan

lib/ArangoDB/AbstractDocument.pm  view on Meta::CPAN

package ArangoDB::AbstractDocument;
use strict;
use warnings;
use utf8;
use 5.008001;
use Scalar::Util qw(weaken);

use overload
    q{""}    => sub { shift->document_handle },
    fallback => 1;

sub new {
    my ( $class, $conn, $doc ) = @_;
    die "Invalid argument for $class : undef" unless defined $doc;
    my $self = bless { connection => $conn, }, $class;
    weaken( $self->{connection} );
    my $id  = CORE::delete $doc->{_id};
    my $rev = CORE::delete $doc->{_rev};
    $self->{is_persistent} = defined $id && defined $rev;
    if ( $self->{is_persistent} ) {
        ( $self->{_collection_id}, $self->{_id} ) = split '/', $id;
        $self->{_document_handle} = $id;
        $self->{_rev}             = $rev;
    }
    map { $self->{$_} = CORE::delete $doc->{$_} } grep {/^_/} keys %$doc;
    $self->{document} = $doc;

lib/ArangoDB/Collection.pm  view on Meta::CPAN

package ArangoDB::Collection;
use strict;
use warnings;
use utf8;
use 5.008001;
use JSON ();
use Carp qw(croak);
use Scalar::Util qw(weaken);
use Class::Accessor::Lite ( ro => [qw/id status/], );
use ArangoDB::Constants qw(:api :status);
use ArangoDB::Document;
use ArangoDB::Edge;
use ArangoDB::Index::Primary;
use ArangoDB::Index::Hash;
use ArangoDB::Index::SkipList;
use ArangoDB::Index::Geo;
use ArangoDB::Index::CapConstraint;
use ArangoDB::Cursor;

lib/ArangoDB/Collection.pm  view on Meta::CPAN


=head2 new($connection, $collection_info)

Constructor.

=cut

sub new {
    my ( $class, $db, $raw_collection ) = @_;
    my $self = bless { db => $db, connection => $db->{connection}, }, $class;
    weaken( $self->{db} );
    weaken( $self->{connection} );
    for my $key (qw/id name status/) {
        $self->{$key} = $raw_collection->{$key};
    }
    $self->{_api_path} = API_COLLECTION . '/' . $self->{id};
    return $self;
}

=pod

=head2 id()

lib/ArangoDB/Cursor.pm  view on Meta::CPAN

package ArangoDB::Cursor;
use strict;
use warnings;
use utf8;
use 5.008001;
use Carp qw(croak);
use Scalar::Util qw(weaken);
use ArangoDB::Document;
use ArangoDB::Constants qw(:api);
use Class::Accessor::Lite ( ro => [qw/id count length/], );

BEGIN {
    if ( eval { require Data::Clone; 1; } ) {
        *_clone = \&Data::Clone::clone;
    }
    else {

lib/ArangoDB/Cursor.pm  view on Meta::CPAN

        id         => $cursor->{id},
        length     => $len,
        count      => $cursor->{count},
        has_more   => $cursor->{hasMore},
        position   => 0,
        result     => $cursor->{result} || [],
    }, $class;
    if ( $self->{id} ) {
        $self->{_api_path} = API_CURSOR . '/' . $self->{id};
    }
    weaken( $self->{connection} );
    return $self;
}

sub next {
    my $self = shift;
    if ( $self->{position} < $self->{length} || $self->_get_next_batch() ) {
        return ArangoDB::Document->new( $self->{connection}, _clone( $self->{result}->[ $self->{position}++ ] ) );
    }
    return;
}

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

package ArangoDB::Index;
use strict;
use warnings;
use utf8;
use 5.008001;
use Carp qw(croak);
use Scalar::Util qw(weaken);
use ArangoDB::Constants qw(:api);
use Class::Accessor::Lite ( ro => [qw/id collection_id type/] );

use overload
    q{""}    => sub { $_[0]->id },
    fallback => 1;

sub new {
    my ( $class, $conn, $params ) = @_;
    my $self = bless { %$params, connection => $conn, }, $class;
    weaken( $self->{connection} );
    $self->{collection_id} = ( split '/', $self->{id} )[0];
    $self->{_api_path} = API_INDEX . '/' . $self->{id};
    return $self;
}

sub drop {
    my $self = shift;
    my $res = eval { $self->{connection}->http_delete( $self->{_api_path} ) };
    if ($@) {
        $self->_server_error_handler( $@, 'drop' );

lib/ArangoDB/Statement.pm  view on Meta::CPAN

package ArangoDB::Statement;
use strict;
use warnings;
use utf8;
use 5.008001;
use Carp qw(croak);
use JSON ();
use Scalar::Util qw(weaken);
use ArangoDB::Cursor;
use ArangoDB::BindVars;
use ArangoDB::Constants qw(:api);

use overload
    q{""}    => sub { $_[0]->{query} },
    fallback => 1;

sub new {
    my ( $class, $conn, $query ) = @_;
    my $self = bless {
        connection => $conn,
        query      => $query,
        bind_vars  => ArangoDB::BindVars->new(),
    }, $class;
    weaken( $self->{connection} );
    return $self;
}

sub execute {
    my ( $self, $options ) = @_;
    my $data = $self->_build_data($options);
    my $res = eval { $self->{connection}->http_post( API_CURSOR, $data ) };
    if ($@) {
        $self->_server_error_handler( $@, 'Failed to execute query' );
    }



( run in 0.369 second using v1.01-cache-2.11-cpan-65fba6d93b7 )