From: Rafael Kitover Date: Mon, 25 May 2009 15:10:06 +0000 (+0000) Subject: dbic helper - minor fixes for simple value detection X-Git-Tag: v0.26~24 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=5f9a34d7a46dbf7b4870820d2fe46a226a99b491;hp=9f7cc709e5279d4e3ff0f419bcf67c43c668de94;p=catagits%2FCatalyst-Model-DBIC-Schema.git dbic helper - minor fixes for simple value detection --- diff --git a/lib/Catalyst/Helper/Model/DBIC/Schema.pm b/lib/Catalyst/Helper/Model/DBIC/Schema.pm index 2895c86..7564960 100644 --- a/lib/Catalyst/Helper/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Helper/Model/DBIC/Schema.pm @@ -13,6 +13,7 @@ use MooseX::Types::Moose qw/Str HashRef Bool ArrayRef/; 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'; @@ -227,7 +228,7 @@ sub _parse_loader_args { 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 $@; } @@ -328,7 +329,7 @@ sub _build_helper_connect_info { 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; @@ -410,7 +411,7 @@ sub _parse_connect_info { 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); @@ -423,7 +424,7 @@ sub _parse_connect_info { 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': $@" @@ -449,6 +450,16 @@ sub _quote_unless_struct { $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; diff --git a/t/08helper.t b/t/08helper.t index 3f3bd74..c6e1e00 100644 --- a/t/08helper.t +++ b/t/08helper.t @@ -4,7 +4,7 @@ use warnings; 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; @@ -80,6 +80,10 @@ $i = instance(args => [$static, q{exclude=^(foo|bar)$}]); 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