ArangoDB2

 view release on metacpan or  search on metacpan

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

package ArangoDB2::Base;

use strict;
use warnings;

use Carp qw(croak);
use Data::Dumper;
use JSON::XS;
use Scalar::Util qw(blessed weaken);



# new
#
# Arango organizes data hierarchically: Databases > Collections > Documents
#
# This constructor can build ArangoDB2::Database, Collection, Document, Edge,
# etc. objects which all follow the same pattern
sub new
{
    my $class = shift;
    # new instance
    my $self = {};
    bless($self, $class);
    # process args
    while (my $arg = shift) {
        # if arg is a ref it should be another
        # ArangoDB::* object
        if (ref $arg) {
            # prevent circular ref
            weaken $arg;
            # create reference to parent object
            $self->{$arg->_class} = $arg;
        }
        # if arg is a string then it is the "name"
        # of this object
        else {
            $self->name($arg);
        }
    }
    # if we have a name and can get then try it
    $self->get if defined $self->name
        and $self->can('get');

    return $self;
}

# api_path
#
# return /_db/<db name>/_api
sub api_path
{
    my $self = shift;

    my $db_name
        = $self->database
        ? $self->database->name
        : $self->name;

    return '/' . join('/', '_db', $db_name, '_api', @_);
}

# arango
#
# ArangoDB2 instance
sub arango { $_[0]->{arango} }

# collection

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

    $params ||= $self->_params;
    # copy params
    for my $param (@$params) {
        $self->{$param} = delete $data->{$param}
            if exists $data->{$param};
    }
    # copy _id and _rev to id/rev
    $self->{id} = delete $data->{_id}
        if exists $data->{_id};
    $self->{rev} = delete $data->{_rev}
        if exists $data->{_rev};
    # if user is set then use it as name
    if (exists $data->{user}) {
        $self->{name} = delete $data->{user};
    }
    # otherwise try _key
    elsif (exists $data->{_key}) {
        $self->{name} = delete $data->{_key}
    }
    # copy to and from
    $self->{from} = delete $data->{_from}
        if exists $data->{_from};
    $self->{to} = delete $data->{_to}
        if exists $data->{_to};

    return $self;
}

# _get_set
#
# either get or set value.
# setting value returns self.
sub _get_set
{
    my($self, $param, $value, $validate) = @_;

    if (defined $value) {
        # if we are only validating then return valid value
        return $value if $validate;
        # set value and return self
        $self->{$param} = $value;
        return $self;
    }
    else {
        # return currently set value
        return $self->{$param};
    }
}

# _get_set_bool
#
# either get value  or set JSON bool value.
# setting value returns self.
sub _get_set_bool
{
    my($self, $param, $value, $validate) = @_;

    if (defined $value) {
        # accept "true" as JSON bool false
        if ($value eq "true") {
            $value = JSON::XS::true;
        }
        # accept "false" as JSON bool false
        elsif ($value eq "false") {
            $value = JSON::XS::false;
        }
        # use the true/false of value to determine JSON bool
        else {
            $value = $value ? JSON::XS::true : JSON::XS::false;
        }
        # if we are only validating then return valid value
        return $value if $validate;
        # set value and return self
        $self->{$param} = $value;
        return $self;
    }
    else {
        # return currently set value
        return $self->{$param};
    }
}

# _get_set_id
#
# get/set id with either string or object
# setting a value returns self
sub _get_set_id
{
    my($self, $param, $value, $validate) = @_;

    if (defined $value) {
        # get value from an ArangoDB2 object
        if ( blessed $value && $value->can('id') ) {
            $value = $value->id
        }
        # if we are only validating then return valid value
        return $value if $validate;
        # set value and return self
        $self->{$param} = $value;
        return $self;
    }
    else {
        # return currently set value
        return $self->{$param};
    }
}

# _get_set_name
#
# get/set name with either name or object
# setting a value returns self
sub _get_set_name
{
    my($self, $param, $value, $validate) = @_;

    if (defined $value) {
        # get value from an ArangoDB2 object
        if ( blessed $value && $value->can('name') ) {
            $value = $value->name
        }
        # if we are only validating then return valid value
        return $value if $validate;
        # set value and return self
        $self->{$param} = $value;
        return $self;
    }
    else {
        # return currently set value
        return $self->{$param};



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