add self to credits
[dbsrgits/DBIx-Class-Schema-Loader.git] / lib / DBIx / Class / Schema / Loader.pm
index d3ee1ef..a68e585 100644 (file)
@@ -7,16 +7,16 @@ use MRO::Compat;
 use mro 'c3';
 use Carp::Clan qw/^DBIx::Class/;
 use Scalar::Util 'weaken';
-use Sub::Name 'subname';
-use DBIx::Class::Schema::Loader::Utils 'array_eq';
+use Sub::Util 'set_subname';
+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.07042';
+our $VERSION = '0.07049';
 
 __PACKAGE__->mk_group_accessors('inherited', qw/
                                 _loader_args
@@ -187,13 +187,13 @@ sub _invoke_loader {
     $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)
@@ -232,13 +232,28 @@ sub _merge_state_from {
 
     $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) = @_;
@@ -341,7 +356,7 @@ sub connection {
         # ->load_components and we are now in a different place in the mro.
         no warnings 'redefine';
 
-        local *connection = subname __PACKAGE__.'::connection' => sub {
+        local *connection = set_subname __PACKAGE__.'::connection' => sub {
             my $self = shift;
             $self->next::method(@_);
         };
@@ -460,11 +475,11 @@ sub import {
         }
         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,
         }
     }
 }
@@ -611,82 +626,87 @@ Based on L<DBIx::Class::Loader> by Sebastian Riedel
 
 Based upon the work of IKEBE Tomohiro
 
-=head1 AUTHOR
+=head1 AUTHORS
 
-blblack: Brandon Black <blblack@gmail.com>
+Caelum: Rafael Kitover <rkitover@cpan.org>
+
+Dag-Erling Smørgrav <des@des.no>
 
-=head1 CONTRIBUTORS
+Matias E. Fernandez <mfernandez@pisco.ch>
 
-ilmari: Dagfinn Ilmari MannsE<aring>ker <ilmari@ilmari.org>
+SineSwiper: Brendan Byrd <byrd.b@insightcom.com>
+
+TSUNODA Kazuya <drk@drk7.jp>
+
+acmoore: Andrew Moore <amoore@cpan.org>
+
+alnewkirk: Al Newkirk <awncorp@cpan.org>
+
+andrewalker: André Walker <andre@andrewalker.net>
+
+angelixd: Paul C. Mantz <pcmantz@cpan.org>
+
+arc: Aaron Crane <arc@cpan.org>
 
 arcanez: Justin Hunter <justin.d.hunter@gmail.com>
 
 ash: Ash Berlin <ash@cpan.org>
 
-btilly: Ben Tilly <btilly@gmail.com>
+blblack: Brandon Black <blblack@gmail.com>
 
-Caelum: Rafael Kitover <rkitover@cpan.org>
+bphillips: Brian Phillips <bphillips@cpan.org>
 
-TSUNODA Kazuya <drk@drk7.jp>
+btilly: Ben Tilly <btilly@gmail.com>
 
-rbo: Robert Bohne <rbo@cpan.org>
+domm: Thomas Klausner <domm@plix.at>
 
-ribasushi: Peter Rabbitson <ribasushi@cpan.org>
+ether: Karen Etheridge <ether@cpan.org>
 
 gugu: Andrey Kostenko <a.kostenko@rambler-co.ru>
 
+hobbs: Andrew Rodland <arodland@cpan.org>
+
+ilmari: Dagfinn Ilmari MannsE<aring>ker <ilmari@ilmari.org>
+
 jhannah: Jay Hannah <jay@jays.net>
 
 jnap: John Napiorkowski <jjn1056@yahoo.com>
 
-rbuels: Robert Buels <rbuels@gmail.com>
+kane: Jos Boumans <kane@cpan.org>
 
-timbunce: Tim Bunce <timb@cpan.org>
+mattp: Matt Phillips <mattp@cpan.org>
+
+mephinet: Philipp Gortan <philipp.gortan@apa.at>
+
+moritz: Moritz Lenz <moritz@faui2k3.org>
 
 mst: Matt S. Trout <mst@shadowcatsystems.co.uk>
 
 mstratman: Mark A. Stratman <stratman@gmail.com>
 
-kane: Jos Boumans <kane@cpan.org>
+oalders: Olaf Alders <olaf@wundersolutions.com>
 
-waawaamilk: Nigel McNie <nigel@mcnie.name>
+rbo: Robert Bohne <rbo@cpan.org>
 
-acmoore: Andrew Moore <amoore@cpan.org>
+rbuels: Robert Buels <rbuels@gmail.com>
 
-bphillips: Brian Phillips <bphillips@cpan.org>
+ribasushi: Peter Rabbitson <ribasushi@cpan.org>
 
 schwern: Michael G. Schwern <mschwern@cpan.org>
 
-SineSwiper: Brendan Byrd <byrd.b@insightcom.com>
-
-hobbs: Andrew Rodland <arodland@cpan.org>
-
-domm: Thomas Klausner <domm@plix.at>
-
 spb: Stephen Bennett <spb@exherbo.org>
 
-Matias E. Fernandez <mfernandez@pisco.ch>
-
-alnewkirk: Al Newkirk <awncorp@cpan.org>
-
-angelixd: Paul C. Mantz <pcmantz@cpan.org>
-
-andrewalker: André Walker <andre@andrewalker.net>
-
-mattp: Matt Phillips <mattp@cpan.org>
-
-Dag-Erling Smørgrav <des@des.no>
+timbunce: Tim Bunce <timb@cpan.org>
 
-moritz: Moritz Lenz <moritz@faui2k3.org>
+waawaamilk: Nigel McNie <nigel@mcnie.name>
 
 ... and lots of other folks. If we forgot you, please write the current
 maintainer or RT.
 
 =head1 COPYRIGHT & LICENSE
 
-Copyright (c) 2006 - 2009 by the aforementioned
-L<DBIx::Class::Schema::Loader/AUTHOR> and
-L<DBIx::Class::Schema::Loader/CONTRIBUTORS>.
+Copyright (c) 2006 - 2015 by the aforementioned
+L<DBIx::Class::Schema::Loader/AUTHORS>.
 
 This library is free software; you can redistribute it and/or modify it under
 the same terms as Perl itself.