Data-Nested

 view release on metacpan or  search on metacpan

lib/Data/Nested/Multiele.pm  view on Meta::CPAN

   } else {

      # For a hash
      #    If $ele is given and it is empty
      #       Put the new element there
      #    Elsif $ele is given and it doesn't exist
      #       Put it there
      #    Else
      #       Error

      if ($ele  &&  _ele_empty($self,$ele)) {
         _add_element_sethash($self,$ele,$nds);
      } elsif ($ele  &&  ! _ele_exists($self,$ele)) {
         _add_element_sethash($self,$ele,$nds);
      } else {
         $$self{'err'}    = 'nmeele02';
         $$self{'errmsg'} = "Attempt to overwrite an existing element: $ele";
         return;
      }
   }

   $$self{'elesx'}      = undef;
   $$self{'elesxh'}     = {};
   $$self{'elesn'}      = undef;
   $$self{'elesnh'}     = undef;
}

sub _add_element_setlist {
   my($self,$ele,$nds) = @_;

   $$self{'raw'}[$ele] = $nds;
}

sub _add_element_insert {
   my($self,$ele,$nds) = @_;

   splice(@{ $$self{'raw'} },$ele,0,$nds);
   if ($#{ $$self{'data'} } >= $ele) {
      splice(@{ $$self{'data'} },$ele,0,undef);
   }
}

sub _add_element_push {
   my($self,$nds) = @_;

   my $n = $#{ $$self{'raw'} };
   $n++;
   _add_element_setlist($self,$n,$nds);
}

sub _add_element_sethash {
   my($self,$ele,$nds) = @_;

   $$self{'raw'}{$ele}  = $nds;
}

###############################################################################
# UPDATE_ELE METHOD
###############################################################################

sub update_ele {
   my($self,$ele,$path,$val,$new,$ruleset) = @_;

   if (! $$self{'file'}) {
      $$self{'err'}    = 'nmefil06';
      $$self{'errmsg'} = 'No file set.';
      return;
   }

   # Check to make sure $ele is valid (it need only exist)

   if (! _ele_exists($self,$ele)) {
      $$self{'err'}    = 'nmeele01';
      $$self{'errmsg'} = "The specified element does not exist: $ele";
      return;
   }

   # If $val is not passed in, erase the path.

   my $NDS = $self->nds();
   my $nds = $$self{'raw'}{$ele};

   if (! defined $val) {
      $NDS->erase($nds,$path);
      if ($NDS->err()) {
         $$NDS{'err'}     = '';
         $$NDS{'errmsg'}  = '';
         $$self{'err'}    = 'nmends02';
         $$self{'errmsg'} = "Problem encountered while erasing a path: $path";
      }

   } else {

      # Check new/ruleset values

      if (! defined $ruleset  &&
          defined $new  &&
          $NDS->ruleset_valid($new)) {
         $ruleset = $new;
         $new = '';
      }

      $ruleset = 'replace'  if (! $ruleset);

      # Merge in the new value

      if (! $NDS->ruleset_valid($ruleset)) {
         $$self{'err'}    = 'ndserr01';
         $$self{'errmsg'} = "An invalid ruleset was passed in: $ruleset";
         return;
      }

      $NDS->merge_path($nds,$val,$path,$ruleset,$new);

      if ($NDS->err()) {
         $$NDS{'err'}     = '';
         $$NDS{'errmsg'}  = '';
         $$self{'err'}    = 'nmends03';
         $$self{'errmsg'} = 'The value had an invalid structure.';
         return;
      }



( run in 0.726 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )