File Coverage

blib/lib/SQL/Load/Util.pm
Criterion Covered Total %
statement 42 44 95.4
branch 9 12 75.0
condition n/a
subroutine 8 8 100.0
pod 4 4 100.0
total 63 68 92.6


line stmt bran cond sub pod time code
1             package SQL::Load::Util;
2              
3 8     8   133241 use strict;
  8         29  
  8         225  
4 8     8   47 use warnings;
  8         15  
  8         237  
5 8         519 use String::CamelCase qw/
6             camelize
7             decamelize
8 8     8   3656 /;
  8         4543  
9 8     8   53 use base qw/Exporter/;
  8         15  
  8         4504  
10            
11             our @EXPORT_OK = qw/
12             name_list
13             parse
14             remove_extension
15             trim
16             /;
17              
18             sub name_list {
19 164     164 1 12176 my $name = shift;
20            
21 164         208 my @list;
22            
23 164         259 $name = remove_extension($name);
24            
25 164         323 $name =~ s/-/_/xg;
26 164         323 push @list, camelize $name;
27            
28 164         2063 $name = decamelize $name;
29 164         1534 push @list, $name;
30            
31 164         310 $name =~ s/_/-/xg;
32 164         235 push @list, $name;
33            
34 164 100       501 return wantarray ? @list : \@list;
35             }
36              
37             sub parse {
38 32     32 1 7938 my $content = shift;
39 32         45 my $end = shift;
40            
41             # get all sql by name
42 32         390 my (@data) = $content =~ /--\s*(?:#|\[|\()\s*([\w-]+)\s*(?:|]|\))\n([^;]+;)/g;
43            
44             # get all sql without name
45 32 100       89 unless (@data) {
46 12         121 my (@list) = $content =~ /([^;]+;)/g;
47            
48 12         20 my $num = 1;
49 12         22 for my $sql (@list) {
50 31         47 push(@data, $num++);
51 31         66 push(@data, trim($sql));
52             }
53            
54             # if got one or nothing, set content as default
55 12 50       33 unless (@data) {
56 0         0 push(@data, 'default');
57 0         0 push(@data, trim($content));
58             }
59             }
60            
61 32 100       83 if (defined $end) {
62 2         5 for my $sql (@data) {
63 18         41 $sql =~ s/;$/${end}/s;
64             }
65             }
66            
67 32 50       193 return wantarray ? @data : \@data;
68             }
69              
70             sub remove_extension {
71 195     195 1 4441 my $value = shift;
72            
73 195 50       500 $value =~ s/\.sql$//i if $value;
74            
75 195         356 return $value;
76             }
77              
78             sub trim {
79 35     35 1 1551 my $value = shift;
80            
81 35         703 $value =~ s/^\s+|\s+$//g;
82            
83 35         89 return $value;
84             }
85              
86             1;
87              
88             __END__