[svn:p5ee] r8092 - p5ee/trunk/App-Repository/lib/App/SessionObject

[email protected]
Newsgroups perl.cvs.p5ee
Message-ID <[email protected]>
Author: spadkins
Date: Mon Nov 20 12:42:48 2006
New Revision: 8092

Modified:
   p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectDomain.pm
   p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm

Log:
fix usage of set_params()/update_params()

Modified: p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectDomain.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectDomain.pm	(original)
+++ p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectDomain.pm	Mon Nov 20 12:42:48 2006
@@ -48,11 +48,11 @@
         @tables = ($table);
     }
     else {
-        my $object_set = $self->{table};
-        if (ref($object_set) eq "HASH") {
-            foreach my $table (keys %$object_set) {
-                if ($object_set->{$table}{gotten}) {
-                    delete $object_set->{$table}{gotten};
+        my $object_set_def = $self->{table};
+        if (ref($object_set_def) eq "HASH") {
+            foreach my $table (keys %$object_set_def) {
+                if ($object_set_def->{$table}{gotten}) {
+                    delete $object_set_def->{$table}{gotten};
                     push(@tables, $table);
                 }
             }
@@ -82,20 +82,27 @@
     my $context = $self->{context};
     my $domain_params = $self->{params} || {};
 
+    # The $tabledef allows for non-default behavior when getting an object-set from
+    # an object-domain.  It can be set up in the "app.pl" configuration file.
     my $tabledef = $self->{table}{$table};
     if (!$tabledef) {
         $tabledef = {};
         $self->{table}{$table} = $tabledef;
     }
 
+    # object-sets can be named something other than the default name.
     my $object_set_name = $tabledef->{name} || "$self->{name}-$table";
+
+    # object-sets can have special arguments passed to them on initial construction
     my $new_args = $tabledef->{new_args} || {};
     if (!$new_args->{class}) {
         $new_args->{class} = "App::SessionObject::RepositoryObjectSet";
     }
+    # object-sets can refer to physical tables which are different from the object-set name.
     if (!$new_args->{table}) {
         $new_args->{table} = $tabledef->{table} || $table;
     }
+    # object-sets can have a select set of parameters (i.e. a subset of all known to the object-domain)
     if (!$new_args->{params}) {
         my $new_params = $tabledef->{params} || $domain_params || {};
         $new_args->{params} = { %$new_params };
@@ -114,7 +121,7 @@
         $object_set->update_params(\%object_set_param_values);
     }
     else {
-        $object_set->update_params($domain_params);
+        $object_set->set_params($domain_params);
     }
     &App::sub_exit($object_set) if ($App::trace);
     return($object_set);

Modified: p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm
==============================================================================
--- p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm	(original)
+++ p5ee/trunk/App-Repository/lib/App/SessionObject/RepositoryObjectSet.pm	Mon Nov 20 12:42:48 2006
@@ -150,8 +150,34 @@
     &App::sub_entry if ($App::trace);
     my ($self, $params) = @_;
     $params ||= {};
-    $self->{params} = { %$params };
-    $self->_clear_cache();
+    my $redefined = 0;
+    my $self_params = $self->{params};
+    if (!$self_params) {
+        $redefined = 1;
+    }
+    else {
+        my (%param_already_defined, $key);
+        foreach $key (keys %$self_params) {
+            $param_already_defined{$key} = 1;
+            if ((! exists $params->{$key}) ||
+                (! defined $params->{$key} && defined $self_params->{$key}) ||
+                (defined $params->{$key} && ! defined $self_params->{$key}) ||
+                (defined $params->{$key} && defined $self_params->{$key} && $params->{$key} ne $self_params->{$key})) {
+                $redefined = 1;
+            }
+        }
+        if (!$redefined) {
+            foreach $key (keys %$params) {
+                if (! exists $self_params->{$key}) {
+                    $redefined = 1;
+                }
+            }
+        }
+    }
+    if ($redefined) {
+        $self->{params} = { %$params };
+        $self->_clear_cache();
+    }
     &App::sub_exit() if ($App::trace);
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.