X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FHelper%2FModel%2FDBIC%2FSchema.pm;h=e694d69d7adbbada92ab3c53ecc4384be47522ad;hb=ae3d05c2ca7d5dc27fe84ad7b4a3a64722748f51;hp=a479fdcaae510133b5a43c5a7ca0383fd9c9f581;hpb=c34bcab69a93411aaca477595289fa51e6fb8b11;p=catagits%2FCatalyst-Model-DBIC-Schema.git diff --git a/lib/Catalyst/Helper/Model/DBIC/Schema.pm b/lib/Catalyst/Helper/Model/DBIC/Schema.pm index a479fdc..e694d69 100644 --- a/lib/Catalyst/Helper/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Helper/Model/DBIC/Schema.pm @@ -1,9 +1,11 @@ package Catalyst::Helper::Model::DBIC::Schema; +use namespace::autoclean; use Moose; no warnings 'uninitialized'; -our $VERSION = '0.24'; +our $VERSION = '0.34'; +$VERSION = eval $VERSION; use Carp; use Tie::IxHash (); @@ -11,12 +13,9 @@ use Data::Dumper (); use List::Util 'first'; 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'; - =head1 NAME Catalyst::Helper::Model::DBIC::Schema - Helper for DBIC Schema Models @@ -108,6 +107,14 @@ Same, but with extra Schema::Loader args (separate multiple values by commas): exclude='^(wibble|wobble)$' moniker_map='{ foo => "FOO" }' \ dbi:Pg:dbname=foodb myuname mypass +Coderefs are also supported: + + script/myapp_create.pl model CatalystModelName DBIC::Schema \ + MyApp::SchemaClass create=static \ + inflect_singular='sub { $_[0] =~ /\A(.+?)(_id)?\z/; $1 }' \ + moniker_map='sub { join(q{}, map ucfirst, split(/[\W_]+/, lc $_[0])); }' \ + dbi:mysql:foodb myuname mypass + See L for a list of options Create a dynamic DBIx::Class::Schema::Loader-based Schema, @@ -162,7 +169,7 @@ sub mk_compclass { sub BUILD { my $self = shift; my $helper = $self->helper; - my @args = $self->args->flatten if $self->args; + my @args = @{ $self->args || [] }; $helper->{schema_class} = $self->schema_class; @@ -175,7 +182,7 @@ sub BUILD { $self->traits(\@traits); $helper->{traits} = '[' - .(join ',' => map { qq{'$_'} } ($self->traits->flatten)) + .(join ',' => map { qq{'$_'} } @traits) .']'; splice @args, $traits_idx, 1, (); @@ -189,16 +196,21 @@ sub BUILD { $self->_parse_loader_args(\@args); $helper->{loader_args} = $self->_build_helper_loader_args; + } + } - if (first { /^dbi:/i } @args) { - $helper->{setup_connect_info} = 1; + my $dbi_dsn_part; + if (first { ($dbi_dsn_part) = /^(dbi):/i } @args) { + die +qq{DSN must start with 'dbi:' not '$dbi_dsn_part' (case matters!)} + if $dbi_dsn_part ne 'dbi'; - $helper->{connect_info} = - $self->_build_helper_connect_info(\@args); + $helper->{setup_connect_info} = 1; - $self->_parse_connect_info(\@args); - } - } + $helper->{connect_info} = + $self->_build_helper_connect_info(\@args); + + $self->_parse_connect_info(\@args); } $helper->{generator} = ref $self; @@ -270,7 +282,7 @@ sub _read_loader_args { my %loader_args; - while (@$args && $args->[0] !~ /^dbi:/) { + while (@$args && $args->[0] !~ /^dbi:/i) { my ($key, $val) = split /=/, shift(@$args), 2; if ($self->_is_struct($val)) { @@ -401,7 +413,7 @@ sub _get_dsn_user_pass { if ($dsn =~ /sqlite/i) { ($user, $password) = ('', ''); - shift @$connect_info while $connect_info->[0] eq ''; + shift @$connect_info while @$connect_info and $connect_info->[0] eq ''; } else { ($user, $password) = splice @$connect_info, 0, 2; } @@ -451,7 +463,7 @@ sub _parse_connect_info { sub _is_struct { my ($self, $val) = @_; - return $val =~ /^\s*[[{]/; + return $val =~ /^\s*(?:sub|[[{])/; } sub _quote { @@ -564,11 +576,12 @@ L, L =head1 AUTHOR -Brandon L Black, C +See L and +L. -Contributors: +=head1 COPYRIGHT -Rafael Kitover, C<> +See L. =head1 LICENSE