From: Brian Cassidy Date: Thu, 26 Apr 2007 18:20:25 +0000 (+0000) Subject: switch to Module::Install X-Git-Tag: v0.20~1 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Model-DBIC-Schema.git;a=commitdiff_plain;h=60557d3a046be095af36e8375ffa7f9f8ccd7dc8 switch to Module::Install --- diff --git a/Build.PL b/Build.PL deleted file mode 100644 index c14fbfb..0000000 --- a/Build.PL +++ /dev/null @@ -1,25 +0,0 @@ -use strict; -use Module::Build; - -my %arguments = ( - license => 'perl', - module_name => 'Catalyst::Model::DBIC::Schema', - requires => { - 'DBIx::Class' => 0.07000, - 'Catalyst' => 5.64, - 'UNIVERSAL::require' => 0.10, - 'Class::Data::Accessor' => 0.02, - 'Class::Accessor::Fast' => 0.22, - }, - recommends => { - 'Catalyst::Devel' => 1.0, - 'DBIx::Class::Schema::Loader' => 0.03006, - }, - build_requires => { - 'Test::More' => 0.32, - }, - create_makefile_pl => 'passthrough', - create_readme => 1, -); - -Module::Build->new(%arguments)->create_build_script; diff --git a/Changes b/Changes index 4816f15..cf150d2 100644 --- a/Changes +++ b/Changes @@ -2,6 +2,7 @@ Revision history for Perl extension Catalyst::Model::DBIC::Schema 0.19 XXX Not yet released - Fix for rt.cpan.org #22426 + - Switch to Module::Install 0.18 Tue Aug 8 04:34:42 UTC 2006 - Version bump for public release, no functional change diff --git a/Makefile.PL b/Makefile.PL index 192903a..e93897a 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -1,31 +1,19 @@ -# Note: this file was auto-generated by Module::Build::Compat version 0.03 - - unless (eval "use Module::Build::Compat 0.02; 1" ) { - print "This module requires Module::Build to install itself.\n"; - - require ExtUtils::MakeMaker; - my $yn = ExtUtils::MakeMaker::prompt - (' Install Module::Build now from CPAN?', 'y'); - - unless ($yn =~ /^y/i) { - die " *** Cannot install without Module::Build. Exiting ...\n"; - } - - require Cwd; - require File::Spec; - require CPAN; - - # Save this 'cause CPAN will chdir all over the place. - my $cwd = Cwd::cwd(); - - CPAN::Shell->install('Module::Build::Compat'); - CPAN::Shell->expand("Module", "Module::Build::Compat")->uptodate - or die "Couldn't install Module::Build, giving up.\n"; - - chdir $cwd or die "Cannot chdir() back to $cwd: $!"; - } - eval "use Module::Build::Compat 0.02; 1" or die $@; - - Module::Build::Compat->run_build_pl(args => \@ARGV); - require Module::Build; - Module::Build::Compat->write_makefile(build_class => 'Module::Build'); +use inc::Module::Install 0.65; + +name 'Catalyst-Model-DBIC-Schema'; +all_from 'lib/Catalyst/Model/DBIC/Schema.pm'; + +requires 'DBIx::Class' => '0.07000'; +requires 'Catalyst::Runtime' => '5.70'; +requires 'UNIVERSAL::require' => '0.10'; +requires 'Class::Data::Accessor' => '0.02'; +requires 'Class::Accessor::Fast' => '0.22'; +requires 'Test::More'; + +feature 'Catalyst::Helper support', + -default => 0, + 'Catalyst::Devel' => '1.0', + 'DBIx::Class::Schema::Loader' => '0.03006'; + +auto_install; +WriteAll; diff --git a/README b/README new file mode 100644 index 0000000..14a5f92 --- /dev/null +++ b/README @@ -0,0 +1,232 @@ +NAME + Catalyst::Model::DBIC::Schema - DBIx::Class::Schema Model Class + +SYNOPSIS + Manual creation of a DBIx::Class::Schema and a + Catalyst::Model::DBIC::Schema: + + 1. Create the DBIx:Class schema in MyApp/Schema/FilmDB.pm: + + package MyApp::Schema::FilmDB; + use base qw/DBIx::Class::Schema/; + + __PACKAGE__->load_classes(qw/Actor Role/); + + 2. Create some classes for the tables in the database, for example an + Actor in MyApp/Schema/FilmDB/Actor.pm: + + package MyApp::Schema::FilmDB::Actor; + use base qw/DBIx::Class/ + + __PACKAGE__->load_components(qw/Core/); + __PACKAGE__->table('actor'); + + ... + + and a Role in MyApp/Schema/Role.pm: + + package MyApp::Schema::FilmDB::Role; + use base qw/DBIx::Class/ + + __PACKAGE__->load_components(qw/Core/); + __PACKAGE__->table('role'); + + ... + + Notice that the schema is in MyApp::Schema, not in MyApp::Model. + This way it's usable as a standalone module and you can test/run it + without Catalyst. + + 3. To expose it to Catalyst as a model, you should create a DBIC Model + in MyApp/Model/FilmDB.pm: + + package MyApp::Model::FilmDB; + use base qw/Catalyst::Model::DBIC::Schema/; + + __PACKAGE__->config( + schema_class => 'MyApp::Schema::FilmDB', + connect_info => [ + "DBI:...", + "username", + "password", + {AutoCommit => 1} + ] + ); + + See below for a full list of the possible config parameters. + + Now you have a working Model, accessing your separate DBIC Schema. Which + can be used/accessed in the normal Catalyst manner, via $c->model(): + + my $actor = $c->model('FilmDB::Actor')->find(1); + + You can also use it to set up DBIC authentication with + Authentication::Store::DBIC in MyApp.pm: + + package MyApp; + + use Catalyst qw/... Authentication::Store::DBIC/; + + ... + + __PACKAGE__->config->{authentication}{dbic} = { + user_class => 'FilmDB::Actor', + user_field => 'name', + password_field => 'password' + } + + "$c->model()" returns a DBIx::Class::ResultSet for the source name + parameter passed. To find out more about which methods can be called on + a ResultSet, or how to add your own methods to it, please see the + ResultSet documentation in the DBIx::Class distribution. + + Some examples are given below: + + # to access schema methods directly: + $c->model('FilmDB')->schema->source(...); + + # to access the source object, resultset, and class: + $c->model('FilmDB')->source(...); + $c->model('FilmDB')->resultset(...); + $c->model('FilmDB')->class(...); + + # For resultsets, there's an even quicker shortcut: + $c->model('FilmDB::Actor') + # is the same as $c->model('FilmDB')->resultset('Actor') + + # To get the composed schema for making new connections: + my $newconn = $c->model('FilmDB')->composed_schema->connect(...); + + # Or the same thing via a convenience shortcut: + my $newconn = $c->model('FilmDB')->connect(...); + + # or, if your schema works on different storage drivers: + my $newconn = $c->model('FilmDB')->composed_schema->clone(); + $newconn->storage_type('::LDAP'); + $newconn->connection(...); + + # and again, a convenience shortcut + my $newconn = $c->model('FilmDB')->clone(); + $newconn->storage_type('::LDAP'); + $newconn->connection(...); + +DESCRIPTION + This is a Catalyst Model for DBIx::Class::Schema-based Models. See the + documentation for Catalyst::Helper::Model::DBIC::Schema for information + on generating these Models via Helper scripts. + +CONFIG PARAMETERS + schema_class + This is the classname of your DBIx::Class::Schema Schema. It needs + to be findable in @INC, but it does not need to be inside the + "Catalyst::Model::" namespace. This parameter is required. + + connect_info + This is an arrayref of connection parameters, which are specific to + your "storage_type" (see your storage type documentation for more + details). + + This is not required if "schema_class" already has connection + information defined inside itself (which isn't highly recommended, + but can be done) + + For DBIx::Class::Storage::DBI, which is the only supported + "storage_type" in DBIx::Class at the time of this writing, the + parameters are your dsn, username, password, and connect options + hashref. + + If you need to specify the DBIx::Class::Storage::DBI specific + parameter "on_connect_do", or the related "sql_maker" options + "limit_dialect", "quote_char", or "name_sep", you can place these + options into a hashref as the final element of the "connect_info" + arrayref. If in doubt, don't specify these options. You would know + it if you needed them. + + Examples: + + connect_info => [ 'dbi:Pg:dbname=mypgdb', 'postgres', '' ], + + connect_info => [ + 'dbi:SQLite:dbname=foo.db', + { + on_connect_do => [ + 'PRAGMA synchronous = OFF', + ], + } + ], + + connect_info => [ + 'dbi:Pg:dbname=mypgdb', + 'postgres', + '', + { AutoCommit => 0 }, + { + on_connect_do => [ + 'some SQL statement', + 'another SQL statement', + ], + } + ], + + storage_type + Allows the use of a different "storage_type" than what is set in + your "schema_class" (which in turn defaults to "::DBI" if not set in + current DBIx::Class). Completely optional, and probably unnecessary + for most people until other storage backends become available for + DBIx::Class. + +METHODS + new Instantiates the Model based on the above-documented ->config + parameters. The only required parameter is "schema_class". + "connect_info" is required in the case that "schema_class" does not + already have connection information defined for it. + + schema + Accessor which returns the connected schema being used by the this + model. There are direct shortcuts on the model class itself for + schema->resultset, schema->source, and schema->class. + + composed_schema + Accessor which returns the composed schema, which has no connection + info, which was used in constructing the "schema" above. 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 + + clone + Shortcut for ->composed_schema->clone + + connect + Shortcut for ->composed_schema->connect + + source + Shortcut for ->schema->source + + class + Shortcut for ->schema->class + + resultset + Shortcut for ->schema->resultset + + storage + Provides an accessor for the connected schema's storage object. Used + often for debugging and controlling transactions. + +SEE ALSO + General Catalyst Stuff: + + Catalyst::Manual, Catalyst::Test, Catalyst::Request, Catalyst::Response, + Catalyst::Helper, Catalyst, + + Stuff related to DBIC and this Model style: + + DBIx::Class, DBIx::Class::Schema, DBIx::Class::Schema::Loader, + Catalyst::Helper::Model::DBIC::Schema + +AUTHOR + Brandon L Black, "blblack@gmail.com" + +COPYRIGHT + This program is free software, you can redistribute it and/or modify it + under the same terms as Perl itself. +