File Coverage

lib/Neo4j/Driver/ServerInfo.pm
Criterion Covered Total %
statement 31 31 100.0
branch 4 4 100.0
condition n/a
subroutine 11 11 100.0
pod 3 5 100.0
total 49 51 100.0


line stmt bran cond sub pod time code
1 20     20   287 use v5.14;
  20         126  
2 20     20   111 use warnings;
  20         42  
  20         1420  
3              
4             package Neo4j::Driver::ServerInfo 1.02;
5             # ABSTRACT: Provides Neo4j server address and version
6              
7              
8 20     20   114 use Carp qw(croak);
  20         49  
  20         1689  
9             our @CARP_NOT = qw(Neo4j::Driver::Session);
10 20     20   167 use Feature::Compat::Try;
  20         135  
  20         198  
11 20     20   4146 use URI 1.25;
  20         8179  
  20         10290  
12              
13              
14             sub new {
15             # uncoverable pod (private method)
16 90     90 0 345800 my ($class, $server_info) = @_;
17            
18             # don't store the full URI here - it may contain auth credentials
19 90         540 $server_info->{uri} = URI->new( $server_info->{uri} )->host_port;
20            
21 90         13129 return bless $server_info, $class;
22             }
23              
24              
25 2     2 1 1266 sub address { shift->{uri} }
26 180     180 1 3837 sub agent { shift->{version} }
27              
28              
29             sub protocol_version {
30             shift->{protocol}
31 3     3 1 2594 }
32              
33              
34             sub version {
35             # uncoverable pod (see agent)
36 1     1 0 99 warnings::warnif deprecated => "version() in Neo4j::Driver::ServerInfo is deprecated; use agent() instead";
37 1         1516 &agent;
38             }
39              
40              
41             # discover default database on Neo4j >= 4 using the given driver config
42             sub _default_database {
43 83     83   7195 my ($self, $driver) = @_;
44            
45 83         177 my $database = $self->{default_database};
46 83 100       321 return $database if defined $database;
47            
48 56 100       362 return if $self->{version} =~ m{^Neo4j/[123]\.};
49 52         119 try {
50 52         305 my $sys = $driver->session(database => 'system');
51 52         280 $database = $sys->run('SHOW DEFAULT DATABASE')->single->get('name');
52             }
53             catch ($e) {
54             croak sprintf
55             "%sSession creation failed because the default database of %s at %s could not be determined",
56 3         5888 $e, $self->{version}, $self->{uri};
57             }
58 49         261 return $self->{default_database} = $database;
59             }
60              
61              
62             1;
63              
64             __END__