Cosmetic: Fix attribute lines types and defaults
[catagits/Catalyst-Model-DBIC-Schema.git] / lib / Catalyst / Model / DBIC / Schema.pm
index 526d938..a0dc60e 100644 (file)
@@ -5,18 +5,20 @@ use mro 'c3';
 extends 'Catalyst::Model';
 with 'CatalystX::Component::Traits';
 
-our $VERSION = '0.52';
+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
 
@@ -300,8 +302,21 @@ Traits that come with the distribution:
 
 =item L<Catalyst::TraitFor::Model::DBIC::Schema::SchemaProxy>
 
+=item L<Catalyst::TraitFor::Model::DBIC::Schema::PerRequestSchema>
+
 =back
 
+=head2 compose_namespaces
+
+This model calls L<DBIx::Class::Schema/compose_namespaces> 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<storage_type> than what is set in your
@@ -372,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<schema> above.  Useful for creating
+which was used in constructing the L</schema>. 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</compose_namespaces> is not true, L</composed_schema> is equivalent to
+C<< $model->schema_class->clone >>.
+
 =head2 clone
 
 Shortcut for ->composed_schema->clone
@@ -415,10 +433,13 @@ See L<DBIx::Class::Storage> and L<DBIx::Class::Storage::DBI>.
 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);
@@ -432,9 +453,8 @@ 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);
@@ -465,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}.": $@";
     }
@@ -474,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;
@@ -485,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(@_); }
@@ -651,6 +678,7 @@ Traits:
 L<Catalyst::TraitFor::Model::DBIC::Schema::Caching>,
 L<Catalyst::TraitFor::Model::DBIC::Schema::Replicated>,
 L<Catalyst::TraitFor::Model::DBIC::Schema::SchemaProxy>,
+L<Catalyst::TraitFor::Model::DBIC::Schema::PerRequestSchema>,
 L<Catalyst::TraitFor::Model::DBIC::Schema::QueryLog>
 
 =head1 AUTHOR
@@ -673,6 +701,8 @@ ozum: Ozum Eldogan C<ozum@ozum.net>
 
 Pavel I. Shaydo C<zwon@trinitum.org>
 
+SineSwiper: Brendan Byrd <byrd.b@insightcom.com>
+
 =head1 COPYRIGHT
 
 Copyright (c) 2006 - 2010