X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FCatalyst%2FModel%2FDBIC%2FSchema.pm;h=6abd49a5230c6aa48f8b4cf21c681b0f132418a0;hb=f9fc703ef23fb411c1fa53bdf10c6534ba0e7d3b;hp=f509af326a3625e23a2b5b84b1ecd49e2cb23d31;hpb=626adb9c4591e540d675d6927903b82515712394;p=catagits%2FCatalyst-Model-DBIC-Schema.git diff --git a/lib/Catalyst/Model/DBIC/Schema.pm b/lib/Catalyst/Model/DBIC/Schema.pm index f509af3..6abd49a 100644 --- a/lib/Catalyst/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Model/DBIC/Schema.pm @@ -5,18 +5,20 @@ use mro 'c3'; extends 'Catalyst::Model'; with 'CatalystX::Component::Traits'; -our $VERSION = '0.37'; +our $VERSION = '0.65'; $VERSION = eval $VERSION; use namespace::autoclean; use Carp::Clan '^Catalyst::Model::DBIC::Schema'; use Data::Dumper; use DBIx::Class (); +use Module::Runtime qw/use_module/; use Catalyst::Model::DBIC::Schema::Types - qw/ConnectInfo LoadedClass SchemaClass Schema/; + qw/ConnectInfo SchemaClass Schema/; -use MooseX::Types::Moose qw/ArrayRef Str ClassName Undef/; +use MooseX::Types::Moose qw/Str Bool/; +use MooseX::Types::LoadableClass qw/LoadableClass/; =head1 NAME @@ -33,7 +35,7 @@ A typical usage of the helper script would be: script/myapp_create.pl model FilmDB DBIC::Schema MyApp::Schema::FilmDB \ create=static dbi:mysql:filmdb dbusername dbpass \ - quote_char='`' name_sep='.' + quote_names=1 If you are unfamiliar with L, see L first. @@ -169,13 +171,12 @@ C namespace. This parameter is required. =head2 connect_info -This is an arrayref of connection parameters, which are specific to your -C (see your storage type documentation for more details). -If you only need one parameter (e.g. the DSN), you can just pass a string -instead of an arrayref. +This is a hashref or arrayref of connection parameters, which are specific to +your C (see your storage type documentation for more details). If +you only need one parameter (e.g. the DSN), you can just pass a string. This is not required if C already has connection information -defined inside itself (which isn't highly recommended, but can be done) +defined inside itself (which isn't highly recommended, but can be done.) For L, which is the only supported C in L at the time of this writing, the @@ -220,7 +221,7 @@ Or using L: user postgres password "" auto_savepoint 1 - quote_char """ + quote_names 1 on_connect_do some SQL statement on_connect_do another SQL statement @@ -246,7 +247,7 @@ Or using L: LongReadLen: 1000000 LongTruncOk: 1 on_connect_call: 'datetime_setup' - quote_char: '"' + quote_names: 1 The old arrayref style with hashrefs for L then L options is also supported: @@ -301,8 +302,21 @@ Traits that come with the distribution: =item L +=item L + =back +=head2 compose_namespaces + +This model calls L by default to +install classes into the model namespaces. You can turn that off by +setting this attribute to false. Default is true. + +=head2 install_model_shortcuts + +If you don't want shortcut models so you can do e.g. C<< $c->model('DB::Book') +>> set this attribute to false, Default is true. + =head2 storage_type Allows the use of a different C than what is set in your @@ -348,6 +362,13 @@ Unresolved arrayref of traits passed in the config. Traits you used resolved to full class names. +=head1 CONFIGURING YOUR SCHEMA AND RESULTSETS + +See the documentation for +L for instructions on how +to pass config values from your L config to your +L and/or L classes. + =head1 METHODS =head2 new @@ -366,10 +387,13 @@ schema->resultset, schema->source, and schema->class. =head2 composed_schema Accessor which returns the composed schema, which has no connection info, -which was used in constructing the C above. Useful for creating +which was used in constructing the L. Useful for creating new connections based on the same schema/model. There are direct shortcuts from the model object for composed_schema->clone and composed_schema->connect +If L is not true, L is equivalent to +C<< $model->schema_class->clone >>. + =head2 clone Shortcut for ->composed_schema->clone @@ -401,17 +425,21 @@ Shortcut for ->schema->txn_scope_guard =head2 storage Provides an accessor for the connected schema's storage object. -Used often for debugging and controlling transactions. + +See L and L. =cut has schema_class => ( is => 'ro', isa => SchemaClass, - coerce => 1, required => 1 ); +has compose_namespaces => (is => 'ro', isa => Bool, default => 1 ); + +has install_model_shortcuts => (is => 'ro', isa => Bool, default => 1 ); + has storage_type => (is => 'rw', isa => Str); has connect_info => (is => 'rw', isa => ConnectInfo, coerce => 1); @@ -425,13 +453,20 @@ has model_name => ( has _default_cursor_class => ( is => 'ro', - isa => LoadedClass, + isa => LoadableClass, default => 'DBIx::Class::Storage::DBI::Cursor', - coerce => 1 ); has schema => (is => 'rw', isa => Schema); +my $app_class; + +before COMPONENT => sub { + $app_class = ref $_[1] || $_[1]; +}; + +sub app_class { $app_class } + sub BUILD { my ($self, $args) = @_; my $class = $self->_original_class_name; @@ -450,7 +485,7 @@ sub BUILD { } if (exists $self->connect_info->{cursor_class}) { - eval { Class::MOP::load_class($self->connect_info->{cursor_class}) } + eval { use_module($self->connect_info->{cursor_class}) } or croak "invalid connect_info: Cannot load your cursor_class" . " ".$self->connect_info->{cursor_class}.": $@"; } @@ -459,8 +494,13 @@ sub BUILD { my $is_installed = defined $self->composed_schema; - $self->composed_schema($schema_class->compose_namespace($class)) - unless $is_installed; + if (not $is_installed) { + $self->composed_schema($self->compose_namespaces ? + $schema_class->compose_namespace($class) + : + $schema_class->clone + ); + } $self->schema($self->composed_schema->clone) unless $self->schema; @@ -470,7 +510,9 @@ sub BUILD { $self->schema->connection($self->connect_info); - $self->_install_rs_models unless $is_installed; + if ((not $is_installed) && $self->install_model_shortcuts) { + $self->_install_rs_models; + } } sub clone { shift->composed_schema->clone(@_); } @@ -485,6 +527,8 @@ sub txn_do { shift->schema->txn_do(@_); } sub txn_scope_guard { shift->schema->txn_scope_guard(@_); } +sub storage { shift->schema->storage(@_); } + =head2 setup Called at C time before configuration, but after L is @@ -634,6 +678,7 @@ Traits: L, L, L, +L, L =head1 AUTHOR @@ -656,9 +701,11 @@ ozum: Ozum Eldogan C Pavel I. Shaydo C +SineSwiper: Brendan Byrd + =head1 COPYRIGHT -Copyright (c) 2006 - 2009 +Copyright (c) 2006 - 2010 the Catalyst::Model::DBIC::Schema L and L as listed above. @@ -670,4 +717,4 @@ under the same terms as Perl itself. =cut 1; -# vim:sts=4 sw=4 et: +# vim:sts=4 sw=4 et tw=80: