Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
DBIx::Class::DeDBIx::CUser:ContributedHPerleDocumentationCustomResultSource(3)

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

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.

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

COPYRIGHT AND LICENSE
       This software is	copyright (c) 2015 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.24.1   DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource(3)

NAME | DESCRIPTION | AUTHOR | COPYRIGHT AND LICENSE

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=DBIx::Class::DeploymentHandler::Cookbook::CustomResultSource&sektion=3&manpath=FreeBSD+12.1-RELEASE+and+Ports>

home | help