Skip to content

Commit 8aeaba6

Browse files
committed
allow db to also use a JSON file or CPANSA::DB, although cpan-audit doesn't expose this yet
1 parent 8c70c83 commit 8aeaba6

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

lib/CPAN/Audit.pm

+31-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ sub new {
2626

2727
$self->_handle_exclude_file if $self->{exclude_file};
2828

29-
$self->{db} //= CPAN::Audit::DB->db;
29+
$self->{db} //= $self->_get_db(%args);
3030

3131
$self->{filter} = CPAN::Audit::Filter->new( exclude => $args{exclude} );
3232
$self->{query} = CPAN::Audit::Query->new( db => $self->{db} );
@@ -35,6 +35,36 @@ sub new {
3535
return $self;
3636
}
3737

38+
sub _get_db {
39+
my( $self, %params ) = @_;
40+
41+
if ( $params{'json_db'} ) {
42+
my $data = do {
43+
local $/;
44+
open my($fh), '<:raw', $params{'json_db'}
45+
or die "could not read file <$params{json_db}>\n";
46+
<$fh>;
47+
};
48+
state $rc = require JSON;
49+
50+
my $decoded = eval { JSON::decode_json($data) };
51+
die "could not decode JSON from <$params{json_db}>: @_\n" unless defined $decoded;
52+
return $decoded;
53+
}
54+
55+
my $rc = eval { require CPANSA::DB };
56+
if ( $rc ) {
57+
return CPANSA::DB->db;
58+
}
59+
60+
$rc = eval { require CPAN::Audit::DB };
61+
if ( $rc ) {
62+
return CPAN::Audit::DB->db;
63+
}
64+
65+
die "could not find a CPANSA database in CPANSA::DB or CPAN::Audit::DB\n";
66+
}
67+
3868
sub _handle_exclude_file {
3969
my( $self ) = @_;
4070

0 commit comments

Comments
 (0)