Author: dylan
Date: 2004-06-26 23:49:09 -0400 (Sat, 26 Jun 2004)
New Revision: 256

Modified:
   trunk/main/common/lib/Haver/Config.pm
   trunk/main/common/lib/Haver/Util/Misc.pm
Log:
Merging is now an option for Haver::Config.
Merging will only be done if Haver::Config->new is called
with merge => 1.

Added some more assertions to Haver::Util::Misc.



Modified: trunk/main/common/lib/Haver/Config.pm
===================================================================
--- trunk/main/common/lib/Haver/Config.pm       2004-06-27 02:58:55 UTC (rev 
255)
+++ trunk/main/common/lib/Haver/Config.pm       2004-06-27 03:49:09 UTC (rev 
256)
@@ -41,6 +41,7 @@
        }
 
        $me->{_default}    = delete $me->{default};
+       $me->{_merge}      = delete $me->{merge};
 
        #DEBUG(paranoid): "Config file: ", $me->filename;
        if ($me->filename) {
@@ -53,7 +54,8 @@
        my ($me) = @_;
 
        if ($me->{_default}) {
-               %$me = %{Haver::Util::Misc::merge_struct($me, $me->{_default})};
+               my $d = delete $me->{_default};
+               %$me = (%$me, %$d);
        }
 }
 
@@ -61,8 +63,10 @@
        my ($me, $data) = @_;
        #ASSERT: ref($data) eq 'HASH' or UNIVERSAL::isa($data, 'HASH');
 
-       foreach my $k (keys %$data) {
-               $me->{$k} = Haver::Util::Misc::merge_struct($me->{$k}, 
$data->{$k});
+       if (not $me->{_merge}) {
+               %$me = (%$me, %$data);
+       } else {
+               %$me = %{ Haver::Util::Misc::merge_struct($data, $me) };
        }
 }
 

Modified: trunk/main/common/lib/Haver/Util/Misc.pm
===================================================================
--- trunk/main/common/lib/Haver/Util/Misc.pm    2004-06-27 02:58:55 UTC (rev 
255)
+++ trunk/main/common/lib/Haver/Util/Misc.pm    2004-06-27 03:49:09 UTC (rev 
256)
@@ -41,7 +41,7 @@
 
 
 sub parse_datetime {
-       # ASSERT: @ == 1;
+       # ASSERT: @_ == 1;
        my $str = shift;
        require Date::Parse;
        # patterns
@@ -80,6 +80,7 @@
 
 # Author: bdonlan
 sub merge_hash {
+       # ASSERT: reftype($_[0]) eq 'HASH' and reftype($_[1]) eq 'HASH';
        my ($left, $right) = @_;
        my %merged = %$left;
        for (keys %$right) {
@@ -94,6 +95,7 @@
 
 # Author: bdonlan
 sub merge_array {
+       # ASSERT: reftype($_[0]) eq 'ARRAY' and reftype($_[1]) eq 'ARRAY';
        my ($left, $right) = @_;
        return [EMAIL PROTECTED], @$right];
 }


Reply via email to