Author: spadkins
Date: Mon Mar 12 12:54:53 2007
New Revision: 9229

Modified:
   p5ee/trunk/App-Context/lib/App/Service.pm

Log:
enhance dump() method

Modified: p5ee/trunk/App-Context/lib/App/Service.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Service.pm   (original)
+++ p5ee/trunk/App-Context/lib/App/Service.pm   Mon Mar 12 12:54:53 2007
@@ -258,11 +258,50 @@
 use Data::Dumper;
 
 sub dump {
-    my ($self) = @_;
-    my %copy = %$self;
-    delete $copy{context};   # don't dump the reference to the context itself
-    my $name = $self->service_type() . "__" . $self->{name};
-    my $d = Data::Dumper->new([ \%copy ], [ $name ]);
+    my ($self, $ref) = @_;
+    my ($copy, $data, $name);
+    if ($ref) {
+        if (!ref($ref)) {
+            $data = $ref;
+            $name = "scalar";
+        }
+        elsif (ref($ref) eq "ARRAY") {
+            $data = [];
+            my ($r);
+            foreach my $d (@$ref) {
+                $r = ref($d);
+                if (!$r || $r eq "ARRAY" || $r eq "SCALAR") {
+                    push(@$data, $d);
+                }
+                elsif (!$d->{context} && !$d->{_repository}) {
+                    push(@$data, $d);
+                }
+                else {
+                    $copy = { %$d };
+                    $copy->{context} = "<removed>" if ($copy->{context});      
   # don't dump the reference to the context itself (Services)
+                    $copy->{_repository} = "<removed>" if 
($copy->{_repository}); # don't dump the reference to the repository 
(RepositoryObjects)
+                    push(@$data, $copy);
+                }
+            }
+            $data = [ $data ];
+            $name = "array";
+        }
+        else {
+            $copy = { %$ref };
+            $copy->{context} = "<removed>" if ($copy->{context});         # 
don't dump the reference to the context itself (Services)
+            $copy->{_repository} = "<removed>" if ($copy->{_repository}); # 
don't dump the reference to the repository (RepositoryObjects)
+            $data = [ $copy ];
+            $name = "hash";
+        }
+    }
+    else {
+        $copy = { %$self };
+        $copy->{context} = "<removed>" if ($copy->{context});         # don't 
dump the reference to the context itself (Services)
+        $copy->{_repository} = "<removed>" if ($copy->{_repository}); # don't 
dump the reference to the repository (RepositoryObjects)
+        $data = [ $copy ];
+        $name = $self->service_type() . "__" . $self->{name};
+    }
+    my $d = Data::Dumper->new($data, [ $name ]);
     $d->Indent(1);
     return $d->Dump();
 }

Reply via email to