File Coverage

blib/lib/Arango/DB.pm
Criterion Covered Total %
statement 39 72 54.1
branch 0 6 0.0
condition 0 26 0.0
subroutine 13 27 48.1
pod 8 8 100.0
total 60 139 43.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.006';
4 5     5   2119 use base 'Arango::DB::API';
  5         38  
  5         2351  
5 5     5   46 use Arango::DB::Database;
  5         11  
  5         136  
6 5     5   46 use Arango::DB::Collection;
  5         12  
  5         106  
7              
8 5     5   27 use strict;
  5         9  
  5         149  
9 5     5   34 use warnings;
  5         16  
  5         131  
10 5     5   41 use HTTP::Tiny;
  5         8  
  5         131  
11 5     5   24 use JSON;
  5         14  
  5         28  
12 5     5   536 use MIME::Base64 3.11 'encode_base64url';
  5         113  
  5         346  
13 5     5   33 use URI::Encode qw(uri_encode);
  5         8  
  5         263  
14 5     5   29 use JSON::Schema::Fit 0.04;
  5         67  
  5         927  
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              
35 5     5   2395 use Sub::Install qw(install_sub);
  5         8953  
  5         22  
36 5     5   2780 use Sub::Name qw(subname);
  5         2933  
  5         643  
37             BEGIN {
38 5     5   20 my $package = __PACKAGE__;
39 5         13 for my $m (qw'version status time statistics statistics_description') {
40             install_sub {
41             code => subname(
42             "${package}::$m",
43 0     0     sub { my ($self, %opts) = @_; return $self->_api($m, \%opts) }
  0     0      
        0      
        0      
        0      
44 25         1182 ),
45             into => $package,
46             as => $m
47             };
48             }
49             }
50              
51             sub _auth {
52 0     0     my $self = shift;
53 0           return "Basic " . encode_base64url( $self->{username} . ":" . $self->{password} );
54             }
55              
56             sub list_collections {
57 0     0 1   my ($self, $name) = @_;
58 0           return $self->_api('list_collections', { database => $name })->{result};
59             }
60              
61             sub database {
62 0     0 1   my ($self, $name) = @_;
63 0           my $databases = $self->list_databases;
64 0 0         if (grep {$name eq $_} @$databases) {
  0            
65 0           return Arango::DB::Database->_new( arango => $self, name => $name);
66             } else {
67 0           die "Arango::DB | Database not found."
68             }
69             }
70              
71             sub list_databases {
72 0     0 1   my $self = shift;
73 0           return $self->_api('list_databases')->{result};
74             }
75              
76             sub create_database {
77 0     0 1   my ($self, $name) = @_;
78 0           return $self->_api('create_database', { name => $name });
79             }
80              
81             sub delete_database {
82 0     0 1   my ($self, $name) = @_;
83 0           return $self->_api('delete_database', { name => $name });
84             }
85              
86             sub create_user {
87 0     0 1   my ($self, $username, %opts) = @_;
88 0 0 0       die "Arango::DB | No username suplied" unless defined $username and length $username;
89 0           return $self->_api('create_user', { %opts, user => $username });
90             }
91              
92             sub delete_user {
93 0     0 1   my ($self, $username) = @_;
94 0 0 0       die "Arango::DB | No username suplied" unless defined $username and length $username;
95 0           return $self->_api('delete_user', { username => $username });
96             }
97              
98             1;
99              
100             __END__