use Carp::Clan qw/^DBIx::Class/;
use Scalar::Util 'weaken';
use Sub::Util 'set_subname';
-use DBIx::Class::Schema::Loader::Utils 'array_eq';
+use DBIx::Class::Schema::Loader::Utils qw/array_eq sigwarn_silencer/;
use Try::Tiny;
-use Hash::Merge 'merge';
+use curry;
use namespace::clean;
# Always remember to do all digits for the version even if they're 0
# i.e. first release of 0.XX *must* be 0.XX000. This avoids fBSD ports
# brain damage and presumably various other packaging systems too
-our $VERSION = '0.07047';
+our $VERSION = '0.07049';
__PACKAGE__->mk_group_accessors('inherited', qw/
_loader_args
$args->{naming} = $self->naming if $self->naming;
$args->{use_namespaces} = $self->use_namespaces if defined $self->use_namespaces;
- # XXX this only works for relative storage_type, like ::DBI ...
my $loader_class = $self->loader_class;
if ($loader_class) {
$loader_class = "DBIx::Class::Schema::Loader${loader_class}" if $loader_class =~ /^::/;
$args->{loader_class} = $loader_class;
};
+ # XXX this only works for relative storage_type, like ::DBI ...
my $impl = $loader_class || "DBIx::Class::Schema::Loader" . $self->storage_type;
try {
$self->ensure_class_loaded($impl)
$self->_copy_state_from($from);
- $self->class_mappings(merge($orig_class_mappings, $self->class_mappings))
+ $self->class_mappings(__merge($orig_class_mappings, $self->class_mappings))
if $orig_class_mappings;
- $self->source_registrations(merge($orig_source_registrations, $self->source_registrations))
+ $self->source_registrations(__merge($orig_source_registrations, $self->source_registrations))
if $orig_source_registrations;
}
+my $merger;
+sub __merge {
+
+ local $SIG{__WARN__} = sigwarn_silencer(qr/Arguments for _merge_hashes must be hash references/);
+
+ ( $merger ||= do {
+ require Hash::Merge;
+ my $m = Hash::Merge->new('LEFT_PRECEDENT');
+ $m->set_clone_behavior(0);
+ $m;
+ } )->merge(
+ $_[0], $_[1]
+ );
+}
+
sub _copy_state_from {
my $self = shift;
my ($from) = @_;
}
elsif($opt eq 'naming') {
no strict 'refs';
- *{"${cpkg}::naming"} = sub { $self->naming(@_) };
+ *{"${cpkg}::naming"} = $self->curry::naming;
}
elsif($opt eq 'use_namespaces') {
no strict 'refs';
- *{"${cpkg}::use_namespaces"} = sub { $self->use_namespaces(@_) };
+ *{"${cpkg}::use_namespaces"} = $self->curry::use_namespaces,
}
}
}
domm: Thomas Klausner <domm@plix.at>
+ether: Karen Etheridge <ether@cpan.org>
+
gugu: Andrey Kostenko <a.kostenko@rambler-co.ru>
hobbs: Andrew Rodland <arodland@cpan.org>