From: Rafael Kitover Date: Sun, 27 Dec 2009 08:11:49 +0000 (+0000) Subject: deprecate schema proxying, release X-Git-Tag: v0.34^0 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Model-DBIC-Schema.git;a=commitdiff_plain;h=ae3d05c2ca7d5dc27fe84ad7b4a3a64722748f51 deprecate schema proxying, release --- diff --git a/Makefile.PL b/Makefile.PL index eba03a1..91cabb6 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -4,6 +4,16 @@ name 'Catalyst-Model-DBIC-Schema'; perl_version 5.008001; all_from 'lib/Catalyst/Model/DBIC/Schema.pm'; +warn < '0.08114'; requires 'Catalyst::Runtime' => '5.80005'; requires 'CatalystX::Component::Traits' => '0.14'; diff --git a/lib/Catalyst/Helper/Model/DBIC/Schema.pm b/lib/Catalyst/Helper/Model/DBIC/Schema.pm index 2858896..e694d69 100644 --- a/lib/Catalyst/Helper/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Helper/Model/DBIC/Schema.pm @@ -4,7 +4,7 @@ use namespace::autoclean; use Moose; no warnings 'uninitialized'; -our $VERSION = '0.33'; +our $VERSION = '0.34'; $VERSION = eval $VERSION; use Carp; diff --git a/lib/Catalyst/Model/DBIC/Schema.pm b/lib/Catalyst/Model/DBIC/Schema.pm index 45392e9..32f179d 100644 --- a/lib/Catalyst/Model/DBIC/Schema.pm +++ b/lib/Catalyst/Model/DBIC/Schema.pm @@ -5,7 +5,7 @@ use mro 'c3'; extends 'Catalyst::Model'; with 'CatalystX::Component::Traits'; -our $VERSION = '0.33'; +our $VERSION = '0.34'; $VERSION = eval $VERSION; use namespace::autoclean; @@ -60,11 +60,6 @@ be used/accessed in the normal Catalyst manner, via C<< $c->model() >>: my $db_model = $c->model('FilmDB'); # a Catalyst::Model my $dbic = $c->model('FilmDB')->schema; # the actual DBIC object -The Model proxies to the C instance so you can do: - - my $rs = $db_model->resultset('Actor'); # ... or ... - my $rs = $dbic ->resultset('Actor'); # same! - There is also a shortcut, which returns a L directly, instead of a L: @@ -124,7 +119,7 @@ When your Catalyst app starts up, a thin Model layer is created as an interface to your DBIC Schema. It should be clearly noted that the model object returned by C<< $c->model('FilmDB') >> is NOT itself a DBIC schema or resultset object, but merely a wrapper proving L to access the underlying -schema (but also proxies other methods to the underlying schema.) +schema. In addition to this model class, a shortcut class is generated for each source in the schema, allowing easy and direct access to a resultset of the @@ -166,8 +161,6 @@ use with L, the old default. =head1 CONFIG PARAMETERS -Any options in your config not listed here are passed to your schema. - =head2 schema_class This is the classname of your L Schema. It needs @@ -289,10 +282,6 @@ E.g.: A new instance is created at application time, so any consumed required attributes, coercions and modifiers will work. -By default, the L trait -is loaded. It can be disabled by specifying C<-SchemaProxy> in traits. See -L. - Traits are applied at L time using L. @@ -361,15 +350,6 @@ Traits you used resolved to full class names. =head1 METHODS -Methods not listed here are delegated to the connected schema used by the model -instance, so the following are equivalent: - - $c->model('DB')->schema->my_accessor('foo'); - # or - $c->model('DB')->my_accessor('foo'); - -Methods on the model take precedence over schema methods. - =head2 new Instantiates the Model based on the above-documented ->config parameters. @@ -425,10 +405,6 @@ Used often for debugging and controlling transactions. =cut -has '+_trait_merge' => (default => 1); - -__PACKAGE__->config->{traits} = ['SchemaProxy']; - has schema_class => ( is => 'ro', isa => SchemaClass, @@ -469,7 +445,7 @@ sub BUILD { die "Either ->config->{connect_info} must be defined for $class" . " or $schema_class must have connect info defined on it." . " Here's what we got:\n" - . Dumper($self); + . Dumper($args); } } @@ -486,7 +462,8 @@ sub BUILD { $self->composed_schema($schema_class->compose_namespace($class)) unless $is_installed; - $self->schema($self->composed_schema->clone); + $self->schema($self->composed_schema->clone) + unless $self->schema; $self->schema->storage_type($self->storage_type) if $self->storage_type; @@ -500,7 +477,7 @@ sub clone { shift->composed_schema->clone(@_); } sub connect { shift->composed_schema->connect(@_); } -# proxy methods, for when the SchemaProxy trait isn't loaded +# some proxy methods, see also SchemaProxy sub resultset { shift->schema->resultset(@_); } @@ -631,6 +608,14 @@ L in MyApp.pm: } }); +=head1 METHOD PROXYING + +The automatic proxying to the underlying L has been +removed as of version C<0.34>, to enable this feature add C to +L. + +See L. + =head1 SEE ALSO General Catalyst Stuff: diff --git a/lib/Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm b/lib/Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm index 92bbc90..3fe2973 100644 --- a/lib/Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm +++ b/lib/Catalyst/TraitFor/Model/DBIC/Schema/SchemaProxy.pm @@ -3,6 +3,7 @@ package Catalyst::TraitFor::Model::DBIC::Schema::SchemaProxy; use namespace::autoclean; use Moose::Role; use Carp::Clan '^Catalyst::Model::DBIC::Schema'; +use Catalyst::Model::DBIC::Schema::Types 'Schema'; =head1 NAME @@ -11,27 +12,31 @@ Options from Model =head1 DESCRIPTION -Allows you to call L methods directly on the Model -instance, and passes config options to the L attributes at -C time. +Allows you to call your L methods directly on the Model +instance, and passes config options to the C attributes at C +time. -This trait is loaded by default, but can be disabled by adding C<-SchemaProxy> -to the L array. +Methods and attributes local to your C take precedence over C +methods and attributes. =cut after setup => sub { my ($self, $args) = @_; + my $schema = $self->schema; + my $was_mutable = $self->meta->is_mutable; $self->meta->make_mutable; $self->meta->add_attribute('schema', is => 'rw', - isa => 'DBIx::Class::Schema', + isa => Schema, handles => $self->_delegates # this removes the attribute too ); $self->meta->make_immutable unless $was_mutable; + + $self->schema($schema) if $schema; }; after BUILD => sub { diff --git a/t/09schema_options.t b/t/09schema_options.t index 2f95fc7..d1e1c80 100644 --- a/t/09schema_options.t +++ b/t/09schema_options.t @@ -21,6 +21,7 @@ is $m->schema->a_schema_option, 'pass the crack pipe', 'delegation works'; sub instance { Catalyst::Model::DBIC::Schema->COMPONENT('MyApp', { + traits => 'SchemaProxy', schema_class => 'ASchemaClass', connect_info => ['dbi:SQLite:foo.db', '', ''], @_,