File Coverage

blib/lib/Env/Dot.pm
Criterion Covered Total %
statement 42 42 100.0
branch 7 10 70.0
condition n/a
subroutine 9 9 100.0
pod 1 1 100.0
total 59 62 95.1


line stmt bran cond sub pod time code
1             ## no critic (ValuesAndExpressions::ProhibitConstantPragma)
2             package Env::Dot;
3 4     4   678095 use strict;
  4         6  
  4         177  
4 4     4   16 use warnings;
  4         4  
  4         184  
5              
6             # We define our own import routine because
7             # this is the point (when `use Env::Dot` is called)
8             # when we do our magic.
9              
10             {
11 4     4   15 no warnings 'redefine'; ## no critic [TestingAndDebugging::ProhibitNoWarnings]
  4         4  
  4         248  
12              
13             sub import {
14 11     11   32709 load_vars();
15 9         120861 return;
16             }
17             }
18              
19 4     4   833 use English qw( -no_match_vars ); # Avoids regex performance penalty in perl 5.18 and earlier
  4         6593  
  4         22  
20 4     4   1409 use Carp;
  4         6  
  4         356  
21              
22             # ABSTRACT: Read environment variables from .env file
23              
24             our $VERSION = '0.017_002'; # TRIAL VERSION: generated by DZP::OurPkgVersion
25              
26 4         313 use Env::Dot::Functions qw(
27             get_dotenv_vars
28             interpret_dotenv_filepath_var
29             get_envdot_filepaths_var_name
30             extract_error_msg
31             create_error_msg
32 4     4   1427 );
  4         10  
33              
34             use constant {
35 4         1298 OPTION_FILE_TYPE => q{file:type},
36             OPTION_FILE_TYPE_PLAIN => q{plain},
37             OPTION_FILE_TYPE_SHELL => q{shell},
38             DEFAULT_OPTION_FILE_TYPE => q{shell},
39             DEFAULT_ENVDOT_FILEPATHS => q{.env},
40             INDENT => q{ },
41 4     4   22 };
  4         4  
42              
43             sub load_vars {
44 11     11 1 18 my @dotenv_filepaths;
45 11 100       32 if ( exists $ENV{ get_envdot_filepaths_var_name() } ) {
46 5         10 @dotenv_filepaths = interpret_dotenv_filepath_var( $ENV{ get_envdot_filepaths_var_name() } );
47             }
48             else {
49 6 50       109 if ( -f DEFAULT_ENVDOT_FILEPATHS ) {
50 6         15 @dotenv_filepaths = (DEFAULT_ENVDOT_FILEPATHS); # The CLI parameter
51             }
52             }
53              
54 11         34 my @vars;
55 11 100       16 eval { @vars = get_dotenv_vars(@dotenv_filepaths); 1; } or do {
  11         29  
  9         23  
56 2         4 my $e = $EVAL_ERROR;
57 2         6 my ( $err, $l, $fp ) = extract_error_msg($e);
58 2 50       164 croak 'Error: ' . $err . ( $l ? qq{ line $l} : q{} ) . ( $fp ? qq{ file '$fp'} : q{} );
    50          
59             };
60 9         44 my %new_env;
61              
62             # Populate new env with the dotenv variables.
63 9         16 foreach my $var (@vars) {
64 77         125 $new_env{ $var->{'name'} } = $var->{'value'};
65             }
66 9         77 foreach my $var_name ( sort keys %ENV ) {
67 118         208 $new_env{$var_name} = $ENV{$var_name};
68             }
69              
70             # We need to replace the current %ENV, not change individual values.
71             ## no critic [Variables::RequireLocalizedPunctuationVars]
72 9         334 %ENV = %new_env;
73 9         75 return \%ENV;
74             }
75              
76             1;
77              
78             __END__