File Coverage

blib/lib/Data/Object/Role/String.pm
Criterion Covered Total %
statement 68 69 98.5
branch 24 30 80.0
condition 5 6 83.3
subroutine 27 27 100.0
pod 0 25 0.0
total 124 157 78.9


line stmt bran cond sub pod time code
1             # ABSTRACT: A String Object Role for Perl 5
2             package Data::Object::Role::String;
3              
4 49     49   251238 use 5.010;
  49         158  
  49         1780  
5 49     49   10475 use Data::Object::Role;
  49         87  
  49         442  
6              
7             map with($_), our @ROLES = qw(
8             Data::Object::Role::Defined
9             Data::Object::Role::Detract
10             Data::Object::Role::Output
11             Data::Object::Role::Type
12             );
13              
14             our $VERSION = '0.20'; # VERSION
15              
16             sub append {
17 1     1 0 52 return join ' ', @_;
18             }
19              
20             sub camelcase {
21 2     2 0 3 my ($string) = @_;
22 2         72 $string = CORE::ucfirst(CORE::lc("$string"));
23 2         22 $string =~ s/[^a-zA-Z0-9]+([a-z])/\U$1/g;
24 2         3 $string =~ s/[^a-zA-Z0-9]+//g;
25 2         7 return $string;
26             }
27              
28             sub chomp {
29 1     1 0 2 my ($string) = @_;
30 1 50       70 CORE::chomp $string and return $string;
31             }
32              
33             sub chop {
34 1     1 0 2 my ($string) = @_;
35 1 50       48 CORE::chop $string and return $string;
36             }
37              
38             sub concat {
39 1     1 0 2 my ($string, @args) = @_;
40 1         52 return join '', $string, @args;
41             }
42              
43             sub contains {
44 4     4 0 4 my ($string, $pattern) = @_;
45              
46 4 100       17 return ($string =~ $pattern) ? 1 : 0
    100          
47             if 'Regexp' eq ref $pattern;
48              
49 2 100       105 return index($string, $pattern) < 0 ? 0 : 1
    50          
50             if defined $pattern;
51              
52 0         0 return 0;
53             }
54              
55             sub hex {
56 1     1 0 2 my ($string) = @_;
57 1         54 return CORE::hex $string;
58             }
59              
60             sub index {
61 6     6 0 8 my ($string, $substr, $start) = @_;
62 6 100       115 return CORE::index $string, $substr if not defined $start;
63 4         58 return CORE::index $string, $substr, $start;
64             }
65              
66             sub lc {
67 2     2 0 4 my ($string) = @_;
68 2         101 return CORE::lc $string;
69             }
70              
71             sub lcfirst {
72 1     1 0 2 my ($string) = @_;
73 1         56 return CORE::lcfirst $string;
74             }
75              
76             sub length {
77 1     1 0 2 my ($string) = @_;
78 1         47 return CORE::length $string;
79             }
80              
81             sub lines {
82 1     1 0 2 my ($string) = @_;
83 1         56 return [CORE::split /\n+/, $string];
84             }
85              
86             sub lowercase {
87 1     1 0 4 goto &lc
88             }
89              
90             sub replace {
91 4     4 0 10 my ($self, $find, $replace, $flags) = @_;
92 4 100       12 $flags = defined $flags ? $flags : '';
93 4 100 66     25 $find = quotemeta $find if $find and 'Regexp' ne ref $find;
94              
95 4         12 local $@;
96 4         414 eval("sub { \$_[0] =~ s/$find/$replace/$flags }")->($self);
97              
98 4         34 return $self;
99             }
100              
101             sub reverse {
102 1     1 0 1 my ($string) = @_;
103 1         50 return CORE::reverse $string;
104             }
105              
106             sub rindex {
107 10     10 0 11 my ($string, $substr, $start) = @_;
108 10 100       72 return CORE::rindex $string, $substr if not defined $start;
109 8         65 return CORE::rindex $string, $substr, $start;
110             }
111              
112             sub snakecase {
113 1     1 0 2 my ($string) = @_;
114 1         53 $string = CORE::lc("$string");
115 1         9 $string =~ s/[^a-zA-Z0-9]+([a-z])/\U$1/g;
116 1         3 $string =~ s/[^a-zA-Z0-9]+//g;
117 1         3 return $string;
118             }
119              
120             sub split {
121 5     5 0 10 my ($string, $pattern, $limit) = @_;
122 5 100 100     45 $pattern = quotemeta $pattern if $pattern and !ref $pattern;
123 5 100       273 return [CORE::split /$pattern/, $string] if !defined $limit;
124 2         150 return [CORE::split /$pattern/, $string, $limit];
125             }
126              
127             sub strip {
128 1     1 0 2 my ($string) = @_;
129 1 50       61 $string =~ s/\s{2,}/ /g and return $string;
130             }
131              
132             sub titlecase {
133 1     1 0 2 my ($string) = @_;
134 1 50       61 $string =~ s/\b(\w)/\U$1/g and return $string;
135             }
136              
137             sub trim {
138 1     1 0 10 my ($string) = @_;
139 1 50       74 $string =~ s/^\s+|\s+$//g and return $string;
140             }
141              
142             sub uc {
143 2     2 0 9 my ($string) = @_;
144 2         107 return CORE::uc $string;
145             }
146              
147             sub ucfirst {
148 1     1 0 2 my ($string) = @_;
149 1         50 return CORE::ucfirst $string;
150             }
151              
152             sub uppercase {
153 1     1 0 4 goto &uc;
154             }
155              
156             sub words {
157 1     1 0 2 my ($string) = @_;
158 1         55 return [CORE::split /\s+/, $string];
159             }
160              
161             1;
162              
163             __END__