handle column accessor collisions with UNIVERSAL methods
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader / Utils.pm
1 package # hide from PAUSE
2     DBIx::Class::Schema::Loader::Utils;
3
4 use strict;
5 use warnings;
6 use Data::Dumper ();
7 use Exporter 'import';
8
9 our @EXPORT_OK = qw/split_name dumper dumper_squashed eval_without_redefine_warnings/;
10
11 use constant BY_CASE_TRANSITION =>
12     qr/(?<=[[:lower:]\d])[\W_]*(?=[[:upper:]])|[\W_]+/;
13
14 use constant BY_NON_ALPHANUM =>
15     qr/[\W_]+/;
16
17 sub split_name($) {
18     my $name = shift;
19
20     split $name =~ /[[:upper:]]/ && $name =~ /[[:lower:]]/ ? BY_CASE_TRANSITION : BY_NON_ALPHANUM, $name;
21 }
22
23 sub dumper($) {
24     my $val = shift;
25
26     my $dd = Data::Dumper->new([]);
27     $dd->Terse(1)->Indent(1)->Useqq(1)->Deparse(1)->Quotekeys(0)->Sortkeys(1);
28     return $dd->Values([ $val ])->Dump;
29 }
30
31 sub dumper_squashed($) {
32     my $val = shift;
33
34     my $dd = Data::Dumper->new([]);
35     $dd->Terse(1)->Indent(1)->Useqq(1)->Deparse(1)->Quotekeys(0)->Sortkeys(1)->Indent(0);
36     return $dd->Values([ $val ])->Dump;
37 }
38
39 sub eval_without_redefine_warnings {
40     my $code = shift;
41
42     my $warn_handler = $SIG{__WARN__} || sub { warn @_ };
43     local $SIG{__WARN__} = sub {
44         $warn_handler->(@_)
45             unless $_[0] =~ /^Subroutine \S+ redefined/;
46     };
47     eval $code;
48     die $@ if $@;
49 }
50
51 1;
52 # vim:et sts=4 sw=4 tw=0: