public function save(IStorable $storable)
 {
     $this->createSchema($schema = $storable->schema());
     $schema->validate($store = $storable->store($this));
     /**
      * exactly empty arrays are unmodified state; otherwise NULL is delete state
      */
     if (is_array($store) && empty($store)) {
         return $storable;
     }
     $guid = $this->hasStorable($guid = $storable->guid()) ? $guid : null;
     $this->register($storable);
     if (empty($store) && $guid !== null) {
         $this->delete($storable);
     } else {
         if (!empty($store) && $guid === null) {
             $this->create($storable, $store);
         } else {
             if (!empty($store) && $guid !== null) {
                 $this->update($storable, $store);
             }
         }
     }
     return $storable;
 }