File Coverage

blib/lib/Test2/Tools/QuickDB.pm
Criterion Covered Total %
statement 43 59 72.8
branch 16 28 57.1
condition 8 8 100.0
subroutine 8 9 88.8
pod 3 3 100.0
total 78 107 72.9


line stmt bran cond sub pod time code
1             package Test2::Tools::QuickDB;
2 20     20   1481847 use strict;
  20         50  
  20         916  
3 20     20   117 use warnings;
  20         42  
  20         1729  
4              
5             our $VERSION = '0.000039';
6              
7 20     20   118 use Carp qw/croak/;
  20         39  
  20         1340  
8 20     20   121 use Test2::API qw/context/;
  20         44  
  20         1074  
9 20     20   7021 use DBIx::QuickDB();
  20         63  
  20         726  
10              
11 20     20   8630 use Importer Importer => 'import';
  20         90041  
  20         260  
12              
13             our @EXPORT = qw/get_db_or_skipall get_db skipall_unless_can_db/;
14              
15             sub skipall_unless_can_db {
16 23     23 1 3252587 my %spec;
17 23 100       132 if (@_ == 1) {
18 10   100     84 my $type = ref($_[0]) || '';
19 10 100       38 if (!$type) {
    50          
    0          
20 9         49 $spec{driver} = $_[0];
21             }
22             elsif ($type eq 'ARRAY') {
23 1         4 $spec{drivers} = $_[0];
24             }
25             elsif ($type eq 'HASH') {
26 0         0 %spec = %{$_[0]};
  0         0  
27             }
28             else {
29 0         0 croak "Invalid Argument: $_[0]";
30             }
31             }
32             else {
33 13         50 %spec = @_;
34             }
35              
36 23         138 my $ctx = context();
37              
38 23 50       132408 $spec{bootstrap} = 1 unless defined $spec{bootstrap};
39 23 50       124 $spec{autostart} = 1 unless defined $spec{autostart};
40 23 50       95 $spec{load_sql} = 1 unless defined $spec{load_sql};
41              
42 23 100 100     159 my $drivers = $spec{driver} ? [$spec{driver}] : $spec{drivers} || [DBIx::QuickDB->plugins];
43              
44 23         16712 my $reason;
45 23         83 my $ok = 0;
46 23         74 for my $driver (@$drivers) {
47 45 50       148 next unless defined $driver;
48 45         401 my ($v, $fqn, $why) = DBIx::QuickDB->check_driver($driver, \%spec);
49 45 100       254 $reason = $why if @$drivers == 1;
50 45 50       2537 next unless $v;
51 0         0 $ok = $fqn;
52 0         0 last;
53             }
54              
55 23 50       144 if ($ok) {
56 0         0 $ctx->release;
57 0         0 return $ok;
58             }
59              
60 23   100     315 $ctx->plan(0, 'SKIP' => $reason || "no db driver is viable");
61 0         0 $ctx->release;
62              
63 0         0 return;
64             }
65              
66             sub get_db {
67             # Get a context in case anything below here has testing code.
68 0     0 1 0 my $ctx = context();
69              
70 0         0 my $db = DBIx::QuickDB->build_db(@_);
71              
72 0         0 $ctx->release;
73              
74 0         0 return $db;
75             }
76              
77             sub get_db_or_skipall {
78 2 50   2 1 5038 my $name = ref($_[0]) ? undef : shift(@_);
79 2   100     9 my $spec = shift(@_) || {};
80              
81 2         7 my $ctx = context();
82              
83 2         206 skipall_unless_can_db(%$spec);
84 0 0         my $db = get_db($name ? $name : (), $spec);
85              
86 0           $ctx->release;
87              
88 0           return $db;
89             }
90              
91             1;
92              
93             __END__