ArangoDB

 view release on metacpan or  search on metacpan

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

package ArangoDB::Document;
use strict;
use warnings;
use utf8;
use 5.008001;
use Carp qw(croak);
use parent 'ArangoDB::AbstractDocument';
use ArangoDB::Constants qw(:api);
use ArangoDB::Edge;

sub new {
    my $class = shift;
    my $self  = $class->SUPER::new(@_);
    $self->{_api_path} = API_DOCUMENT . '/' . $self;
    return $self;
}

sub any_edges {
    my ( $self, $vertex ) = @_;
    return $self->_get_edges('any');
}

sub in_edges {
    my ( $self, $vertex ) = @_;
    return $self->_get_edges('in');
}

sub out_edges {
    my ( $self, $vertex ) = @_;
    return $self->_get_edges('out');
}

sub _api_path {
    $_[0]->{_api_path};
}

sub _get_edges {
    my ( $self, $direction ) = @_;
    my $vertex = $self->{_document_handle};
    my $api    = API_EDGES . '/' . $self->{_collection_id} . '?vertex=' . $vertex . '&direction=' . $direction;
    my $res    = eval { $self->{connection}->http_get($api) };
    if ($@) {
        $self->_server_error_handler( $@, "get edges($vertex) that related to" );
    }
    my $conn = $self->{connection};
    my @edges = map { ArangoDB::Edge->new( $conn, $_ ) } @{ $res->{edges} };
    return \@edges;
}

# Handling server error
sub _server_error_handler {
    my ( $self, $error, $action ) = @_;
    my $msg = sprintf( 'Failed to %s the document(%s)', $action, $self->{_document_handle} );
    if ( ref($error) && $error->isa('ArangoDB::ServerException') ) {
        $msg .= ':' . ( $error->detail->{errorMessage} || q{} );
    }
    croak $msg;
}

1;
__END__

=pod

=head1 NAME

ArangoDB::Document - An ArangoDB document

=head1 DESCRIPTION

Instance of ArangoDB document.

=head1 METHODS



( run in 1.887 second using v1.01-cache-2.11-cpan-8f98c5d2c55 )