use Catalyst::Model::DBIC::Schema::Types 'CreateOption';
use Moose::Autobox;
use List::MoreUtils 'firstidx';
+use Scalar::Util 'looks_like_number';
use namespace::clean -except => 'meta';
while (my ($key, $val) = each %loader_args) {
next if $key =~ /^(?:components|constraint|exclude)\z/;
- $loader_args{$key} = eval $val;
+ $loader_args{$key} = $self->_eval($val);
die "syntax error for loader args key '$key' with value '$val': $@"
if $@;
}
for (@connect_info) {
if (/^\s*{.*}\s*\z/) {
- my $hash = eval $_;
+ my $hash = $self->_eval($_);
die "Syntax errorr in connect_info hash: $_: $@" if $@;
my %hash = %$hash;
for (@connect_info) {
if (/^\s*{.*}\s*\z/) {
- my $hash = eval $_;
+ my $hash = $self->_eval($_);
die "Syntax errorr in connect_info hash: $_: $@" if $@;
%connect_info = (%connect_info, %$hash);
if ($key =~ /^(?:quote_char|name_sep|limit_dialect)\z/) {
$connect_info{$key} = $val;
} else {
- $connect_info{$key} = eval $val;
+ $connect_info{$key} = $self->_eval($val);
}
die "syntax error for connect_info key '$key' with value '$val': $@"
$val;
}
+sub _eval {
+ my ($self, $code) = @_;
+
+ return $code if looks_like_number $code;
+
+ return $code if $code =~ m{^[\w;:/]*\z};
+
+ return eval "{no strict; $code}";
+}
+
sub _gen_dynamic_schema {
my $self = shift;
use FindBin '$Bin';
use lib "$Bin/lib";
-use Test::More tests => 37;
+use Test::More tests => 38;
use Test::Exception;
use Catalyst::Helper::Model::DBIC::Schema;
use Catalyst::Helper;
is $i->loader_args->{exclude}, qr/^(foo|bar)$/,
'exclude loader arg';
+$i = instance(args => [$static, q{db_schema=foo;bar::baz/quux}]);
+is $i->loader_args->{db_schema}, q{foo;bar::baz/quux},
+ 'simple value loader arg';
+
$i = instance(args => [
$static, 'components=TimeStamp', $sqlite, $on_connect_do,
$quote_char, $name_sep