File Coverage

blib/lib/Arango/DB.pm
Criterion Covered Total %
statement 30 57 52.6
branch 0 2 0.0
condition 0 20 0.0
subroutine 10 18 55.5
pod 7 7 100.0
total 47 104 45.1


line stmt bran cond sub pod time code
1             # ABSTRACT: A simple interface to ArangoDB REST API
2             package Arango::DB;
3             $Arango::DB::VERSION = '0.004';
4 4     4   1562 use base 'Arango::DB::API';
  4         30  
  4         1668  
5 4     4   33 use Arango::DB::Database;
  4         8  
  4         95  
6 4     4   20 use Arango::DB::Collection;
  4         8  
  4         76  
7              
8 4     4   20 use strict;
  4         8  
  4         71  
9 4     4   17 use warnings;
  4         8  
  4         104  
10 4     4   21 use HTTP::Tiny;
  4         7  
  4         74  
11 4     4   17 use JSON;
  4         6  
  4         18  
12 4     4   513 use MIME::Base64 3.11 'encode_base64url';
  4         98  
  4         203  
13 4     4   23 use URI::Encode qw(uri_encode);
  4         8  
  4         199  
14 4     4   40 use JSON::Schema::Fit;
  4         9  
  4         2100  
15              
16             sub new {
17 0     0 1   my ($package, %opts) = @_;
18 0           my $self = bless { %opts } => $package;
19              
20 0   0       $self->{host} ||= $ENV{ARANGO_DB_HOST} || "localhost";
      0        
21 0   0       $self->{port} ||= $ENV{ARANGO_DB_PORT} || 8529;
      0        
22              
23 0   0       $self->{username} ||= $ENV{ARANGO_DB_USERNAME} || "root";
      0        
24 0   0       $self->{password} ||= $ENV{ARANGO_DB_PASSWORD} || "";
      0        
25              
26             $self->{headers} = {
27 0           Authorization => $self->_auth
28             };
29 0           $self->{http} = HTTP::Tiny->new(default_headers => $self->{headers});
30              
31 0           return $self;
32             }
33              
34             sub _auth {
35 0     0     my $self = shift;
36 0           return "Basic " . encode_base64url( $self->{username} . ":" . $self->{password} );
37             }
38              
39             sub version {
40 0     0 1   my ($self, %opts) = @_;
41 0           return $self->_api('version', \%opts);
42             }
43              
44             sub list_collections {
45 0     0 1   my ($self, $name) = @_;
46 0           return $self->_api('list_collections', { database => $name })->{result};
47             }
48              
49             sub database {
50 0     0 1   my ($self, $name) = @_;
51 0           my $databases = $self->list_databases;
52 0 0         if (grep {$name eq $_} @$databases) {
  0            
53 0           return Arango::DB::Database->_new( arango => $self, name => $name);
54             } else {
55 0           die "Arango::DB | Database not found."
56             }
57             }
58              
59             sub list_databases {
60 0     0 1   my $self = shift;
61 0           return $self->_api('list_databases')->{result};
62             }
63              
64             sub create_database {
65 0     0 1   my ($self, $name) = @_;
66 0           return $self->_api('create_database', { name => $name });
67             }
68              
69             sub delete_database {
70 0     0 1   my ($self, $name) = @_;
71 0           return $self->_api('delete_database', { name => $name });
72             }
73              
74             1;
75              
76             __END__