no more role-delegates!
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Deprecated.pm
index 5024417..b361628 100644 (file)
 package DBIx::Class::DeploymentHandler::Deprecated;
 
+# ABSTRACT: (DEPRECATED) Use this if you are stuck in the past
+
 use Moose;
 use Moose::Util 'apply_all_roles';
 
 extends 'DBIx::Class::DeploymentHandler::Dad';
-with 'DBIx::Class::DeploymentHandler::Deprecated::WithDeprecatedSqltDeployMethod',
-     'DBIx::Class::DeploymentHandler::Deprecated::WithDeprecatedVersionStorage';
+# 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::Deprecated',
+    delegate_name        => 'deploy_method',
+    attributes_to_assume => ['schema'],
+    attributes_to_copy   => [qw( upgrade_directory databases sql_translator_args )],
+  },
+  'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
+    interface_role       => 'DBIx::Class::DeploymentHandler::HandlesVersionStorage',
+    class_name           => 'DBIx::Class::DeploymentHandler::VersionStorage::Deprecated',
+    delegate_name        => 'version_storage',
+    attributes_to_assume => ['schema'],
+  };
+with 'DBIx::Class::DeploymentHandler::WithReasonableDefaults';
 
 sub BUILD {
   my $self = shift;
 
-  if ($self->schema->can('ordered_versions')) {
+  if ($self->schema->can('ordered_versions') && $self->schema->ordered_versions) {
     apply_all_roles(
       $self,
-      'DBIx::Class::DeploymentHandler::WithDatabaseToSchemaVersions'
+      'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
+        interface_role       => 'DBIx::Class::DeploymentHandler::HandlesVersioning',
+        class_name           => 'DBIx::Class::DeploymentHandler::VersionHandler::ExplicitVersions',
+        delegate_name        => 'version_handler',
+        attributes_to_assume => [qw( database_version schema_version to_version )],
+      }
     );
   } else {
     apply_all_roles(
       $self,
-      'DBIx::Class::DeploymentHandler::WithExplicitVersions'
+      'DBIx::Class::DeploymentHandler::WithApplicatorDumple' => {
+        interface_role       => 'DBIx::Class::DeploymentHandler::HandlesVersioning',
+        class_name           => 'DBIx::Class::DeploymentHandler::VersionHandler::DatabaseToSchemaVersions',
+        delegate_name        => 'version_handler',
+        attributes_to_assume => [qw( database_version schema_version to_version )],
+      }
     );
   }
+  # the following is just a hack so that ->version_storage
+  # won't be lazy
+  $self->version_storage;
 }
 
 __PACKAGE__->meta->make_immutable;
 
 1;
 
+# vim: ts=2 sw=2 expandtab
+
 __END__
 
-vim: ts=2 sw=2 expandtab
+=head1 DEPRECATED
+
+I begrudgingly made this module (and other related modules) to make porting
+from L<DBIx::Class::Schema::Versioned> relatively simple.  I will make changes
+to ensure that it works with output from L<DBIx::Class::Schema::Versioned> etc,
+but I will not add any new features to it.  It already lacks numerous features
+that the full version provides in style:
+
+=over
+
+=item *
+
+Downgrades
+
+=item *
+
+Multiple files for migrations
+
+=item *
+
+Perl files in migrations
+
+=item *
+
+Shared Perl/SQL for different databases
+
+=back
+
+And there's probably more.
+
+At version 1.000000 usage of this module will emit a warning.  At version
+2.000000 it will be removed entirely.
+
+To migrate to the New Hotness take a look at:
+L<DBIx::Class::DeploymentHandler::VersionStorage::Deprecated/THIS SUCKS> and
+L<DBIx::Class::DeploymentHandler::DeployMethod::SQL::Translator::Deprecated/THIS SUCKS>.
+
+=head1 SYNOPSIS
+
+Look at L<DBIx::Class::DeploymentHandler/SYNPOSIS>.  I won't repeat
+it here to emphasize, yet again, that this should not be used unless you really
+want to live in the past.
+
+=head1 WHERE IS ALL THE DOC?!
+
+C<DBIx::Class::DeploymentHandler::Deprecated> extends
+L<DBIx::Class::DeploymentHandler::Dad>, so that's probably the first place to
+look when you are trying to figure out how everything works.
+
+Next would be to look at all the roles that fill in the blanks that
+L<DBIx::Class::DeploymentHandler::Dad> expects to be filled.  They would be
+L<DBIx::Class::DeploymentHandler::Deprecated::WithSqltDeployMethod>,
+L<DBIx::Class::DeploymentHandler::Deprecated::WithDeprecatedVersionStorage>, and
+L<DBIx::Class::DeploymentHandler::WithReasonableDefaults>.  Also, this class
+is special in that it applies either
+L<DBIx::Class::DeploymentHandler::WithExplicitVersions> or
+L<DBIx::Class::DeploymentHandler::WithDatabaseToSchemaVersions> depending on
+your schema.