File Coverage

lib/Neo4j/Driver/ServerInfo.pm
Criterion Covered Total %
statement 38 38 100.0
branch 10 10 100.0
condition n/a
subroutine 13 13 100.0
pod 4 6 100.0
total 65 67 100.0


line stmt bran cond sub pod time code
1 17     17   300 use 5.010;
  17         54  
2 17     17   97 use strict;
  17         31  
  17         427  
3 17     17   79 use warnings;
  17         26  
  17         546  
4 17     17   95 use utf8;
  17         38  
  17         116  
5              
6             package Neo4j::Driver::ServerInfo;
7             # ABSTRACT: Provides Neo4j server address and version
8             $Neo4j::Driver::ServerInfo::VERSION = '0.38';
9              
10 17     17   1067 use Carp qw(croak);
  17         41  
  17         1340  
11             our @CARP_NOT = qw(Neo4j::Driver::Session);
12 17     17   135 use URI 1.25;
  17         256  
  17         7351  
13              
14              
15             sub new {
16             # uncoverable pod (private method)
17 84     84 0 21730 my ($class, $server_info) = @_;
18            
19             # don't store the full URI here - it may contain auth credentials
20 84         321 $server_info->{uri} = URI->new( $server_info->{uri} )->host_port;
21            
22 84         9262 return bless $server_info, $class;
23             }
24              
25              
26 2     2 1 1056 sub address { shift->{uri} }
27 168     168 1 2837 sub agent { shift->{version} }
28 4     4 1 1554 sub version { shift->{version} }
29              
30              
31             sub protocol_version {
32             shift->{protocol}
33 3     3 1 2529 }
34              
35              
36             sub protocol {
37             # uncoverable pod (see Deprecations.pod)
38 4     4 0 2343 my ($self) = @_;
39 4         70 warnings::warnif deprecated => __PACKAGE__ . "->protocol() is deprecated; use protocol_version() instead";
40 4         1012 my $bolt_version = $self->{protocol};
41 4 100       24 return "Bolt/$bolt_version" if $bolt_version;
42 3 100       16 return defined $bolt_version ? "Bolt" : "HTTP";
43             }
44              
45              
46             # discover default database on Neo4j >= 4 using the given driver config
47             sub _default_database {
48 82     82   3267 my ($self, $driver) = @_;
49            
50 82         164 my $database = $self->{default_database};
51 82 100       265 return $database if defined $database;
52            
53 51 100       225 return if $self->{version} =~ m{^Neo4j/[123]\.};
54 47         81 eval {
55 47         192 my $sys = $driver->session(database => 'system');
56 47         222 $database = $sys->run('SHOW DEFAULT DATABASE')->single->get('name');
57             };
58 47 100       6787 croak $@ . "Session creation failed because the default "
59             . "database of $self->{version} at $self->{uri} "
60             . "could not be determined" unless defined $database;
61 44         179 return $self->{default_database} = $database;
62             }
63              
64              
65             1;
66              
67             __END__