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.005';
4 4     4   1603 use base 'Arango::DB::API';
  4         28  
  4         1719  
5 4     4   29 use Arango::DB::Database;
  4         11  
  4         90  
6 4     4   22 use Arango::DB::Collection;
  4         9  
  4         77  
7              
8 4     4   20 use strict;
  4         7  
  4         98  
9 4     4   22 use warnings;
  4         8  
  4         115  
10 4     4   21 use HTTP::Tiny;
  4         7  
  4         81  
11 4     4   38 use JSON;
  4         10  
  4         24  
12 4     4   456 use MIME::Base64 3.11 'encode_base64url';
  4         66  
  4         200  
13 4     4   25 use URI::Encode qw(uri_encode);
  4         15  
  4         234  
14 4     4   25 use JSON::Schema::Fit 0.04;
  4         51  
  4         1958  
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__