use strict;
use base qw/Class::Accessor::Fast Class::Data::Inheritable/;
use NEXT;
+use Catalyst::Utils;
__PACKAGE__->mk_classdata($_) for qw/_config _plugins/;
. " did not override Catalyst::Component::process" );
}
-=head2 $c->merge_hash_config( $hashref, $hashref )
+=head2 $c->merge_config_hashes( $hashref, $hashref )
Merges two hashes together recursively, giving right-hand precedence.
sub merge_config_hashes {
my ( $self, $lefthash, $righthash ) = @_;
- my %merged = %$lefthash;
- for my $key ( keys %$righthash ) {\r
- my $right_ref = ( ref $righthash->{ $key } || '' ) eq 'HASH';\r
- my $left_ref = ( ( exists $lefthash->{ $key } && ref $lefthash->{ $key } ) || '' ) eq 'HASH';\r
- if( $right_ref and $left_ref ) {\r
- $merged{ $key } = $self->merge_config_hashes(
- $lefthash->{ $key }, $righthash->{ $key }
- );\r
- }
- else {
- $merged{ $key } = $righthash->{ $key };
- }\r
- }
-
- return \%merged;
+ return Catalyst::Utils::merge_hashes( $lefthash, $righthash );
}
=head1 OPTIONAL METHODS
return 1;
}
+=head2 merge_hashes($hashref, $hashref)
+
+Base code to recursively merge two hashes together with right-hand precedence.
+
+=cut
+
+sub merge_hashes {
+ my ( $lefthash, $righthash ) = @_;
+
+ return $lefthash unless defined $righthash;
+
+ my %merged = %$lefthash;
+ for my $key ( keys %$righthash ) {\r
+ my $right_ref = ( ref $righthash->{ $key } || '' ) eq 'HASH';\r
+ my $left_ref = ( ( exists $lefthash->{ $key } && ref $lefthash->{ $key } ) || '' ) eq 'HASH';\r
+ if( $right_ref and $left_ref ) {\r
+ $merged{ $key } = merge_hashes(
+ $lefthash->{ $key }, $righthash->{ $key }
+ );\r
+ }
+ else {
+ $merged{ $key } = $righthash->{ $key };
+ }\r
+ }
+
+ return \%merged;
+}
+
=head1 AUTHOR