Provided by: libdbix-class-deploymenthandler-perl_0.002208-1_all bug

NAME

       DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource

DESCRIPTION

       One of the reasons for the absurd level of flexibility that DBIx::Class::DeploymentHandler
       is so that you can do things that we did not originally anticipate.  Surprisingly, I never
       added a method to change the table for the version storage.  That's fine though, the
       following recipe shows how one can do it in style:

   Version Storage
        package MyApp::Schema::DBICDHStorage;

        # the following is necessary for some setups
        use MyApp::Schema::DBICDHStorageResult;

        use Moose;
        extends 'DBIx::Class::DeploymentHandler::VersionStorage::Standard';

        sub _build_version_rs {
          $_[0]->schema->register_class(
            __VERSION =>
              'MyApp::Schema::DBICDHStorageResult'
          );
          $_[0]->schema->resultset('__VERSION')
        }

        no Moose;
        __PACKAGE__->meta->make_immutable;
        1;

       There's not a whole lot special there.  The only real bit of code to point out is the
       "register_class" call.  We make sure to point "__VERSION" to the result class that we will
       define next.

   Version Result Class
        package MyApp::Schema::DBICDHStorageResult;
        use parent 'DBIx::Class::DeploymentHandler::VersionStorage::Standard::VersionResult';
        __PACKAGE__->table('fl_bench_journal_versions');
        1;

       As you can see, this is almost silly how simple it is, we just change the table being set
       on the original result.

   Our very own DeploymentHandler
        package MyApp::Schema::DeploymentHandler;
        use Moose;
        extends 'DBIx::Class::DeploymentHandler::Dad';

        # a single with would be better, but we can't do that
        # see: http://rt.cpan.org/Public/Bug/Display.html?id=46347
        with 'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
            interface_role       => 'DBIx::Class::DeploymentHandler::HandlesDeploy',
            class_name           => 'DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator',
            delegate_name        => 'deploy_method',
            attributes_to_assume => ['schema'],
            attributes_to_copy   => [qw( databases script_directory sql_translator_args )],
          },
          'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
            interface_role       => 'DBIx::Class::DeploymentHandler::HandlesVersioning',
            class_name           => 'DBIx::Class::DeploymentHandler::VersionHandler::Monotonic',
            delegate_name        => 'version_handler',
            attributes_to_assume => [qw( database_version schema_version to_version )],
          },
          'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
            interface_role       => 'DBIx::Class::DeploymentHandler::HandlesVersionStorage',
            class_name           => 'MyApp::Schema::DBICDHStorage',
            delegate_name        => 'version_storage',
            attributes_to_assume => ['schema'],
          };
        with 'DBIx::Class::DeploymentHandler::WithReasonableDefaults';

        sub prepare_version_storage_install {
          my $self = shift;

          $self->prepare_resultsource_install({
              result_source => $self->version_storage->version_rs->result_source
          });
        }

        sub install_version_storage {
          my $self = shift;

          my $version = (shift || {})->{version} || $self->schema_version;
          $self->install_resultsource({
              result_source => $self->version_storage->version_rs->result_source,
              version       => $version,
          });
        }

        sub prepare_install {
           $_[0]->prepare_deploy;
           $_[0]->prepare_version_storage_install;
        }

        no Moose;
        __PACKAGE__->meta->make_immutable;
        1;

       Note: if you are using decimal numbers for versioning, you should ammend this
       DeploymentHandler package, setting it's VersionHandler class_name from Monotonic ( which
       handles integer only version numbers ) to ExplicitVersions or DatabaseToSchemaVersions, as
       these handle version numbers as strings instead of integers.

NAME

       DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource - Customize how your DBICDH
       versions are stored

AUTHOR

       Arthur Axel "fREW" Schmidt <frioux+cpan@gmail.com>

COPYRIGHT AND LICENSE

       This software is copyright (c) 2013 by Arthur Axel "fREW" Schmidt.

       This is free software; you can redistribute it and/or modify it under the same terms as
       the Perl 5 programming language system itself.

perl v5.18.1                    DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource(3pm)