File Coverage

blib/lib/PDK/Content/Dumper.pm
Criterion Covered Total %
statement 24 56 42.8
branch 3 30 10.0
condition 1 6 16.6
subroutine 8 10 80.0
pod 3 3 100.0
total 39 105 37.1


line stmt bran cond sub pod time code
1             package PDK::Content::Dumper;
2              
3 2     2   2297 use utf8;
  2         21  
  2         20  
4 2     2   135 use v5.30;
  2         11  
5 2     2   14 use Moose::Role;
  2         5  
  2         19  
6 2     2   15390 use Carp qw(croak);
  2         6  
  2         255  
7 2     2   20 use File::Path qw(make_path);
  2         5  
  2         183  
8 2     2   18 use namespace::autoclean;
  2         4  
  2         40  
9              
10              
11             has month => (
12             is => 'ro',
13             default => sub {
14             my $month = `date +%Y-%m`;
15             chomp($month);
16             return $month;
17             },
18             );
19              
20             has date => (
21             is => 'ro',
22             default => sub {
23             my $date = `date +%Y-%m-%d`;
24             chomp($date);
25             return $date;
26             },
27             );
28              
29             has workdir => (
30             is => 'rw',
31             default => sub {
32             my $value = $ENV{PDK_CONTENT_HOME};
33             _debug_init("从环境变量中加载并设置 workdir:($value)") if defined $value;
34             return $value // glob('~');
35             },
36             );
37              
38             has debug => (
39             is => 'rw',
40             isa => 'Int',
41             default => sub {
42             my $value = $ENV{PDK_CONTENT_DEBUG};
43             _debug_init("从环境变量中加载并设置 debug:($value)") if defined $value;
44             return $value // 0;
45             },
46             );
47              
48              
49             sub now {
50 82     82 1 1031258 my $now = `date "+%Y-%m-%d %H:%M:%S"`;
51 82         1826 chomp($now);
52 82         2675 return $now;
53             }
54              
55             sub dump {
56 82     82 1 962 my ($self, $msg) = @_;
57              
58 82 50 33     2404 $msg .= ';' unless $msg =~ /^\s*$/ || $msg =~ /[,,!!。.]$/;
59              
60 82         574 my $text = $self->now() . " - [debug] $msg";
61 82 50       13308 if ($self->debug == 1) {
    50          
62 0           say $text;
63             }
64             elsif ($self->debug > 1) {
65 0           my $workdir = "$self->{workdir}/$self->{month}/$self->{date}";
66 0 0         make_path($workdir) unless -d $workdir;
67              
68 0   0       my $name = $self->{name} // $self->now;
69 0           my $filename = "$workdir/$name\_dump.txt";
70 0 0         open(my $fh, '>>encoding(UTF-8)', $filename) or croak "无法打开文件 $filename 进行写入: $!";
71 0 0         print $fh "$text\n" or croak "写入文件 $filename 失败: $!";
72 0 0         close($fh) or croak "关闭文件句柄 $filename 失败: $!";
73             }
74             }
75              
76             sub write_file {
77 0     0 1   my ($self, $config, $name) = @_;
78              
79 0 0         croak("必须提供非空配置信息") unless !!$config;
80              
81 0           my $workdir = "$self->{workdir}/$self->{month}/$self->{date}";
82 0 0         make_path($workdir) unless -d $workdir;
83              
84 0           my $enc = Encode::Guess->guess($config);
85 0 0         if (ref($enc)) {
86 0           eval { $config = $enc->decode($config); };
  0            
87 0 0         if (!!$@) {
88 0           $self->dump("[write_file] $name 字符串解码失败:$@");
89             }
90             }
91             else {
92 0           $self->dump("[write_file] $name 无法猜测编码: $enc");
93             }
94              
95 0           my $filename = "$workdir/$name";
96 0           $self->dump("[write_file] 准备将数据写入本地文件: ($workdir/$name)");
97              
98 0 0         open(my $fh, '>>:encoding(UTF-8)', $filename) or croak "无法打开文件 $filename 进行写入: $!";
99 0 0         print $fh $config or croak "写入文件 $filename 失败: $!";
100 0 0         close($fh) or croak "关闭文件句柄 $filename 失败: $!";
101              
102 0           $self->dump("成功写入文本数据到文件: $filename");
103              
104 0           return {success => 1};
105             }
106              
107             sub _debug_init {
108 0     0     my ($msg) = @_;
109 0           my $now = `date "+%Y-%m-%d %H:%M:%S"`;
110 0           chomp($now);
111 0           binmode(STDERR, ':utf8');
112 0           my $text = $now . " - [debug] $msg\n";
113 0 0         print STDERR $text if $ENV{PDK_CONTENT_DEBUG};
114             }
115              
116             1;