our $VERSION = '0.04999_12';
__PACKAGE__->mk_classaccessor('_loader_args' => {});
-__PACKAGE__->mk_classaccessors(qw/dump_to_dir _loader_invoked _loader loader_class/);
+__PACKAGE__->mk_classaccessors(qw/
+ dump_to_dir _loader_invoked _loader loader_class naming
+/);
=head1 NAME
$args->{schema_class} = $class;
weaken($args->{schema}) if ref $self;
$args->{dump_directory} ||= $self->dump_to_dir;
+ $args->{naming} = $self->naming;
# XXX this only works for relative storage_type, like ::DBI ...
my $impl = $self->loader_class
sub import {
my $self = shift;
+
return if !@_;
+
+ my $cpkg = (caller)[0];
+
foreach my $opt (@_) {
if($opt =~ m{^dump_to_dir:(.*)$}) {
$self->dump_to_dir($1)
}
elsif($opt eq 'make_schema_at') {
no strict 'refs';
- my $cpkg = (caller)[0];
*{"${cpkg}::make_schema_at"} = \&make_schema_at;
}
+ elsif($opt eq 'naming') {
+ no strict 'refs';
+ *{"${cpkg}::naming"} = sub { $self->naming(@_) };
+ }
}
}
sub rescan { my $self = shift; $self->_loader->rescan($self) }
+=head2 naming
+
+=over 4
+
+=item Arguments: \%opts | $ver
+
+=back
+
+Controls the naming options for backward compatibility, see
+L<DBIx::Class::Schema::Loader::Base/naming> for details.
+
+To upgrade a dynamic schema, use:
+
+ __PACKAGE__->naming('current');
+
+Can be imported into your dump script and called as a function as well:
+
+ naming('v4');
=head1 KNOWN ISSUES
classes
monikers
dynamic
+ naming
/);
__PACKAGE__->mk_accessors(qw/
The option also takes a hashref:
- naming => { relationships => 'v5', results => 'v4' }
+ naming => { relationships => 'v5', monikers => 'v4' }
+
+The keys are:
+
+=over 4
+
+=item relationships
+
+How to name relationship accessors.
+
+=item monikers
+
+How to name Result classes.
+
+=back
The values can be:
$self->version_to_dump($DBIx::Class::Schema::Loader::VERSION);
$self->schema_version_to_dump($DBIx::Class::Schema::Loader::VERSION);
+ if (not ref $self->naming && defined $self->naming) {
+ my $naming_ver = $self->naming;;
+ $self->{naming} = {
+ relationships => $naming_ver,
+ monikers => $naming_ver,
+ };
+ }
+
$self->_check_back_compat;
$self;
sub _check_back_compat {
my ($self) = @_;
-# dynamic schemas will always be in 0.04006 mode
+# dynamic schemas will always be in 0.04006 mode, unless overridden
if ($self->dynamic) {
- no strict 'refs';
- my $class = ref $self || $self;
- require DBIx::Class::Schema::Loader::Compat::v0_040;
-
- @{"${class}::ISA"} = map {
- $_ eq 'DBIx::Class::Schema::Loader::Base' ?
- 'DBIx::Class::Schema::Loader::Compat::v0_040' :
- $_
- } @{"${class}::ISA"};
-
- Class::C3::reinitialize;
# just in case, though no one is likely to dump a dynamic schema
$self->schema_version_to_dump('0.04006');
+
+ $self->naming->{relationships} ||= 'v4';
+ $self->naming->{monikers} ||= 'v4';
+
return;
}
while (<$fh>) {
if (/^# Created by DBIx::Class::Schema::Loader v((\d+)\.(\d+))/) {
my $real_ver = $1;
- my $ver = "v${2}_${3}";
- while (1) {
- my $compat_class = "DBIx::Class::Schema::Loader::Compat::${ver}";
- if ($self->load_optional_class($compat_class)) {
- no strict 'refs';
- my $class = ref $self || $self;
-
- @{"${class}::ISA"} = map {
- $_ eq 'DBIx::Class::Schema::Loader::Base' ?
- $compat_class : $_
- } @{"${class}::ISA"};
-
- Class::C3::reinitialize;
- $self->schema_version_to_dump($real_ver);
- last;
- }
- $ver =~ s/\d\z// or last;
- }
+
+ $self->schema_version_to_dump($real_ver);
+
+ # XXX when we go past .0 this will need fixing
+ my ($v) = $real_ver =~ /([1-9])/;
+ $v = "v$v";
+
+ $self->naming->{relationships} ||= $v;
+ $self->naming->{monikers} ||= $v;
+
last;
}
}
return if $self->{skip_relationships};
+ if ($self->naming->{relationships} eq 'v4') {
+ require DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_040;
+ return $self->{relbuilder} ||=
+ DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_040->new(
+ $self->schema, $self->inflect_plural, $self->inflect_singular
+ );
+ }
+
$self->{relbuilder} ||= DBIx::Class::Schema::Loader::RelBuilder->new(
$self->schema, $self->inflect_plural, $self->inflect_singular
);
sub _default_table2moniker {
my ($self, $table) = @_;
+ if ($self->naming->{monikers} eq 'v4') {
+ return join '', map ucfirst, split /[\W_]+/, lc $table;
+ }
+
return join '', map ucfirst, split /[\W_]+/,
Lingua::EN::Inflect::Number::to_S(lc $table);
}
+++ /dev/null
-package DBIx::Class::Schema::Loader::Compat::v0_040;
-
-use strict;
-use warnings;
-use Class::C3;
-
-use base 'DBIx::Class::Schema::Loader::Base';
-
-use DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_040;
-
-# Make a moniker from a table
-sub _default_table2moniker {
- my ($self, $table) = @_;
-
- return join '', map ucfirst, split /[\W_]+/, lc $table;
-}
-
-sub _relbuilder {
- my ($self) = @_;
- $self->{relbuilder} ||=
- DBIx::Class::Schema::Loader::RelBuilder::Compat::v0_040->new(
- $self->schema, $self->inflect_plural, $self->inflect_singular
- );
-}
-
-1;
-
-=head1 NAME
-
-DBIx::Class::Schema::Loader::Compat::v0_040 - Compatibility for DBIx::Class::Schema::Loader
-version 0.04006
-
-=head1 DESCRIPTION
-
-Dumps from the old version are auto-detected, and the compat layer is turned
-on. See also L<DBIx::Class::Schema::Loader::Base/namingg>.
-
-=cut