rearrange tutorial and codebits
Arthur Axel 'fREW' Schmidt [Sat, 10 Jul 2010 08:58:35 +0000 (03:58 -0500)]
lib/DBIx/Class/DeploymentHandler/Manual/CatalystIntro.pod

index 47284ab..59d6f53 100644 (file)
@@ -2,61 +2,55 @@ package DBIx::Class::DeploymentHandler::Manual::CatalystIntro
 
 # ABSTRACT: Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project
 
-
-__END__
 =pod
 
-=head1 NAME
-
-DBIx::Class::DeploymentHandler::Manual::CatalystIntro - Introduction to using DBIx::Class::DeploymentHandler with a new Catalyst Project
-
 =head1 Background
 
-This introduction will use PostgreSQL and Catalyst.  Background information on using PostgreSQL with Catalyst can be found at L<Catalyst::Manual::Tutorial::10_Appendices>.  This guide will assume that you have some understanding of Catalyst.  Please go through the Catalyst tutorials first, if you have not yet done so.
+This introduction will use PostgreSQL and L<Catalyst>.  Background
+information on using PostgreSQL with Catalyst can be found at
+L<Catalyst::Manual::Tutorial::10_Appendices>.  This guide will assume that
+you have some understanding of Catalyst.  Please go through the Catalyst
+tutorials first if you have not yet done so.
 
 =head1 Database Setup
 
-Start by creating a user catalyst, with password catalyst
+Start by creating a user C<catalyst>, with password C<catalyst>
 
-    $ sudo -u postgres createuser -P catalyst
-    Enter password for new role: <catalyst>
-    Enter it again: <catalyst>
-    Shall the new role be a superuser? (y/n) n
-    Shall the new role be allowed to create databases? (y/n) n
-    Shall the new role be allowed to create more new roles? (y/n) n
+ $ sudo -u postgres createuser -P catalyst
+ Enter password for new role: <catalyst>
+ Enter it again: <catalyst>
+ Shall the new role be a superuser? (y/n) n
+ Shall the new role be allowed to create databases? (y/n) n
+ Shall the new role be allowed to create more new roles? (y/n) n
 
-Then create a new database, deploymentintro
+Then create a new database called C<deploymentintro>
 
-    sudo -u postgres createdb -O catalyst deploymentintro
+ sudo -u postgres createdb -O catalyst deploymentintro
 
 =head1 Create the project
 
-    $ catalyst.pl DeploymentIntro
-    $ cd DeploymentIntro
-    $ perl Makefile.PL
+ $ catalyst.pl DeploymentIntro
+ $ cd DeploymentIntro
+ $ perl Makefile.PL
 
 =head1 Create the Schema
 
-    $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
-        create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'
+ $ script/deploymentintro_create.pl model DB DBIC::Schema DeploymentIntro::Schema \
+     create=static 'dbi:Pg:dbname=deploymentintro' 'catalyst' 'catalyst' '{ AutoCommit => 1 }'
 
-    $ mkdir lib/Schema
-    $ mkdir lib/Schema/Result
+ $ mkdir -p lib/Schema/Result
 
-Edit out the following from lib/DeploymentIntro/Model/DB.pm:
+Remove the following from C<lib/DeploymentIntro/Model/DB.pm>:
 
-    __PACKAGE__->config(
-        schema_class => 'DeploymentIntro::Schema',
-
-        connect_info => {
-            dsn => 'dbi:Pg:dbname=deploymentintro',
-            user => 'catalyst',
-            password => 'catalyst',
-            AutoCommit => q{1},
-        }
-    );
+ connect_info => {
+   dsn => 'dbi:Pg:dbname=deploymentintro',
+   user => 'catalyst',
+   password => 'catalyst',
+   AutoCommit => q{1},
+ }
 
-Remove deploymentintro.conf and create a new file, deploymentintro_local.pl with the following:
+Remove C<deploymentintro.conf> and create a new file called
+C<deploymentintro_local.pl> with the following:
 
     {
         name => "DeploymentIntro",
@@ -68,137 +62,182 @@ Remove deploymentintro.conf and create a new file, deploymentintro_local.pl with
                 dsn        => 'dbi:Pg:dbname=deploymentintro',
                 user       => 'catalyst',
                 password   => 'catalyst',
-                AutoCommit => q{1},
+                AutoCommit => 1,
             }
         }
     }
 
-Copy the following program into scripts, under the name deploymentintro_dbicdh.pl
-
-    #!/usr/bin/env perl
-    use strict;
-    use warnings;
-    use feature ":5.10";
-    use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
-    use FindBin;
-    use lib "$FindBin::Bin/../lib";
-    use DeploymentIntro::Schema;
-    use Config::JFDI;
-    my $config = Config::JFDI->new( name => 'DeploymentIntro' );
-    my $config_hash  = $config->get;
-    my $connect_info = $config_hash->{"Model::DB"}{"connect_info"};
-    my $schema       = DeploymentIntro::Schema->connect($connect_info);
-
-    my $dh = DH->new(
-        {
-            schema           => $schema,
-            script_directory => "$FindBin::Bin/../dbicdh",
-            databases        => 'PostgreSQL',
-        }
-    );
+Copy the following program into scripts, under the name
+C<deploymentintro_dbicdh.pl>
 
-    sub install {
-        $dh->prepare_install;
-        $dh->install;
-    }
+ #!/usr/bin/env perl
 
-    sub upgrade {
-        die "Please set the version in Schema.pm"
-            unless $dh->schema->schema_version;
-        die "Please update the version in Schema.pm"
-            if ( $dh->version_storage->version_rs->search({version => $dh->schema_version})->count );
-        die "We only support positive integers for versions around these parts."
-            unless $dh->schema_version =~ /^\d+$/;
-
-        $dh->prepare_deploy;
-        $dh->prepare_upgrade;
-        $dh->upgrade;
-    }
+ use strict;
+ use warnings;
 
-    sub current_version {
-        print $dh->database_version. "\n";
-    }
+ use feature ":5.10";
 
-    sub help {
+ use aliased 'DBIx::Class::DeploymentHandler' => 'DH';
+ use FindBin;
+ use lib "$FindBin::Bin/../lib";
+ use DeploymentIntro::Schema;
+ use Config::JFDI;
 
-    print qq/
-    usage:
-        install
-        upgrade
-        upgrade-to [version]
-        downgrade-to [version]
-        current-version
-    /;
+ my $config = Config::JFDI->new( name => 'DeploymentIntro' );
+ my $config_hash  = $config->get;
+ my $connect_info = $config_hash->{"Model::DB"}{"connect_info"};
+ my $schema       = DeploymentIntro::Schema->connect($connect_info);
 
-    }
+ my $dh = DH->new({
+   schema           => $schema,
+   script_directory => "$FindBin::Bin/../dbicdh",
+   databases        => 'PostgreSQL',
+ });
 
-    help unless $ARGV[0];
+ sub install {
+   $dh->prepare_install;
+   $dh->install;
+ }
 
-    given ( $ARGV[0] ) {
-        when ("install")         { install(); }
-        when ("upgrade")         { upgrade(); }
-        when ("current-version") { current_version(); }
-    }
+ sub upgrade {
+   die "Please set the version in Schema.pm"
+     unless $dh->schema->schema_version;
+   die "Please update the version in Schema.pm"
+     if ( $dh->version_storage->version_rs->search({version => $dh->schema_version})->count );
+   die "We only support positive integers for versions around these parts."
+     unless $dh->schema_version =~ /^\d+$/;
+
+   $dh->prepare_deploy;
+   $dh->prepare_upgrade;
+   $dh->upgrade;
+ }
+
+ sub current_version {
+   say $dh->database_version;
+ }
+
+ sub help {
+ say <<'OUT';
+ usage:
+   install
+   upgrade
+   current-version
+ OUT
+ }
+
+ help unless $ARGV[0];
+
+ given ( $ARGV[0] ) {
+     when ('install')         { install()         }
+     when ('upgrade')         { upgrade()         }
+     when ('current-version') { current_version() }
+ }
+
+Copy the following files into C<lib/DeploymentIntro/Schema/Result>:
+
+C<Cd.pm>
+
+ package DeploymentIntro::Schema::Result::Cd;
+
+ use strict;
+ use warnings;
+
+ use parent 'DBIx::Class::Core';
+
+ __PACKAGE__->load_components(qw(InflateColumn::DateTime));
+ __PACKAGE__->table('cd');
+
+ __PACKAGE__->add_columns(
+   id => {
+     data_type => 'integer',
+     is_auto_increment => 1,
+   },
+   artist_id => {
+     data_type => 'integer'
+   },
+   title => {
+     data_type => 'text'
+   },
+ );
+
+ __PACKAGE__->set_primary_key('id');
+
+ __PACKAGE__->belongs_to(
+   artist => 'DeploymentIntro::Schema::Result::Artist', 'artist_id' );
+
+ __PACKAGE__->has_many(
+   tracks => 'DeploymentIntro::Schema::Result::Track', 'cd_id' );
+
+ 1;
+
+
+C<Artist.pm>
+
+ package DeploymentIntro::Schema::Result::Artist;
+
+ use strict;
+ use warnings;
+
+ use parent 'DBIx::Class::Core';
+
+ __PACKAGE__->table('artist');
+
+ __PACKAGE__->add_columns(
+   id => {
+     data_type => 'integer',
+     is_auto_increment => 1,
+   },
+   name => {
+     data_type => 'text'
+   },
+ );
 
-Copy the following files into lib/DeploymentIntro/Schema/Result
+ __PACKAGE__->set_primary_key('id');
 
-Cd.pm
+ __PACKAGE__->has_many(
+   cds => 'DeploymentIntro::Schema::Result::Cd', 'artist_id' );
 
-    package DeploymentIntro::Schema::Result::Cd;
-    use base qw/DBIx::Class::Core/;
-    __PACKAGE__->load_components(qw/InflateColumn::DateTime/);
-    __PACKAGE__->table('cd');
-    __PACKAGE__->add_columns(
-        'cdid',   { data_type => 'integer' },
-        'artist', { data_type => 'integer' },
-        'title',  { data_type => 'text' }
-    );
-    __PACKAGE__->set_primary_key('cdid');
-    __PACKAGE__->belongs_to(
-        'artist' => 'DeploymentIntro::Schema::Result::Artist' );
-    __PACKAGE__->has_many( 'tracks' => 'DeploymentIntro::Schema::Result::Track' );
+ 1;
 
-    1;
 
+C<Track.pm>
 
-Artist.pm
+ package DeploymentIntro::Schema::Result::Track;
 
-    package DeploymentIntro::Schema::Result::Artist;
-    use base qw/DBIx::Class::Core/;
-    __PACKAGE__->table('artist');
-    __PACKAGE__->add_columns(
-        'artistid', { data_type => 'integer' },
-        'name',     { data_type => 'text' }
-    );
-    __PACKAGE__->set_primary_key('artistid');
-    __PACKAGE__->has_many( 'cds' => 'DeploymentIntro::Schema::Result::Cd' );
+ use strict;
+ use warnings;
 
-    1;
+ use parent 'DBIx::Class::Core';
 
+ __PACKAGE__->table('track');
 
-Track.pm
+ __PACKAGE__->add_columns(
+   id => {
+     data_type => 'integer',
+     is_auto_increment => 1,
+   },
+   cd_id => {
+     data_type => 'integer',
+   },
+   title => {
+     data_type => 'text',
+   }
+ );
 
-    package DeploymentIntro::Schema::Result::Track;
-    use base qw/DBIx::Class::Core/;
-    __PACKAGE__->table('track');
-    __PACKAGE__->add_columns(
-        'trackid', { data_type => 'integer' },
-        'cd',      { data_type => 'integer' },
-        'title',   { data_type => 'text' }
-    );
-    __PACKAGE__->set_primary_key('trackid');
-    __PACKAGE__->belongs_to( 'cd' => 'DeploymentIntro::Schema::Result::Cd' );
+ __PACKAGE__->set_primary_key('id');
 
-    1;
+ __PACKAGE__->belongs_to(
+   cd => 'DeploymentIntro::Schema::Result::Cd', 'cd_id' );
 
+ 1;
 
-And then edit lib/DeploymentIntro/Schema.pm and add the following above the 1 at the bottom
 
-   use vars qw($VERSION);
-   $VERSION = "1";
+And then edit C<lib/DeploymentIntro/Schema.pm> and add the following above the
+1 at the bottom
 
+ our $VERSION = 1;
 
 Now it is just a matter of running
 
-    ./script/deploymentintro_dbicdh.pl  install
+ ./script/deploymentintro_dbicdh.pl install