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 )