docs: function collectionFindOne(filter) {
  
          if ( typeof(filter) !== 'object' ) {
              throw new Error('filter must be an object');
          } else {
              var content             = collections[ this['_collection'] ]
                  , condition         = filter.count()
                  , i                 = 0
                  , result            = null
                  , localeLowerCase   = '';
  
  
              //console.log('condition ', condition, '\nfitler', filter, '\ncontent', content);
              if (condition == 0) return null;
  
              for (var o in content) {
                  for (var f in filter) {
                      localeLowerCase = ( typeof(filter[f]) != 'boolean' ) ? filter[f].toLocaleLowerCase() : filter[f];
                      if ( filter[f] && keywords.indexOf(localeLowerCase) > -1 && localeLowerCase == 'not null' && typeof(content[o][f]) != 'undefined' && typeof(content[o][f]) !== 'object' && content[o][f] === filter[f] && content[o][f] != 'null' && content[o][f] != 'undefined' ) {
                          if (result.indexOf(content[o][f]) < 0 ) {
                              ++i;
                              if (i === condition) {
                                  result                   = content[o];
                                  result['_index']         = o;
                                  result['_collection']    = this['_collection'];
                                  result['_bucket']        = this['_bucket'];
                              }
  
                          }
  
                      } else if ( typeof(content[o][f]) != 'undefined' && typeof(content[o][f]) !== 'object' && content[o][f] === filter[f] ) {
                          ++i;
                          if (i === condition) {
                              result                   = content[o];
                              result['_index']         = o;
                              result['_collection']    = this['_collection'];
                              result['_bucket']        = this['_bucket'];
                              result['_filter']        = filter;
                          }
                      }
                  }
              }
          }
  
          if (result) {
              /**
               * save
               *  e.g.:
               *      // updating property
               *      <obj>.property = 'value';
               *      <obj>.save();
               *
               *      // deleting property
               *      delete <obj>.property;
               *      <obj>.save(true);
               *
               * @param {boolean} enforceDeleted
               * */
              result['save'] = function(enforceDeleted) {
  
                  var enforceDeleted = enforceDeleted || false;
  
                  try {
                      //backing up collections
                      var tmpCollections  = JSON.parse(JSON.stringify(collections));
                      var index           = this['_index'];
                      var collection      = this['_collection'];
                      var bucket          = this['_bucket'];
                      var filter          = this['_filter'];
                      this['_updatedAt']  = new Date().format("isoDateTime");
  
                      merge(tmpCollections[ collection ][ index ], this, true);
  
                      // cleaning
                      delete tmpCollections[ collection ][ index ]['_index'];
                      delete tmpCollections[ collection ][ index ]['_collection'];
                      delete tmpCollections[ collection ][ index ]['_bucket'];
                      delete tmpCollections[ collection ][ index ]['save'];
                      delete tmpCollections[ collection ][ index ]['_filter'];
  
                      if (enforceDeleted && typeof(tmpCollections[ collection ][ index ]) == 'object' ) {
  
                          var parseEnforcedCollection = function (arr, target) {
                              for (var i = 0, len = arr.length; i < len; ++i) {
                                  if ( typeof (target[i]) == 'object' && typeof(arr[i]) != 'undefined' && !Array.isArray(arr[i]) ) {
                                      parseEnforced(arr[i], target[i])
                                  } else if ( !Array.isArray(arr[i]) ){
                                      if (typeof(arr[i]) == 'undefined') {
                                          delete target[i]
                                      }
                                  } else { // is collection type
                                      parseEnforcedCollection(arr[i], target[i])
                                  }
                              }
  
                              return target
                          }
  
                          var parseEnforced = function (obj, target) {
                              for (var prop in target) {
                                  if ( typeof (target[prop]) == 'object' && typeof(obj[prop]) != 'undefined' && !Array.isArray(obj[prop]) ) {
                                      parseEnforced(obj[prop], target[prop])
                                  } else if ( !Array.isArray(obj[prop]) ){
                                      if (typeof(obj[prop]) == 'undefined') {
                                          delete target[ prop ]
                                      }
                                  } else { // is collection type
                                      parseEnforcedCollection(obj[prop], target[prop])
                                  }
                              }
  
                              return target
                          };
  
                          if ( Array.isArray(tmpCollections[ collection ][ index ]) ) {
                              tmpCollections[ collection ][ index ] = parseEnforcedCollection(this, tmpCollections[ collection ][ index ])
                          } else if ( typeof(tmpCollections[ collection ][ index ] ) == 'object' ) {
                              tmpCollections[ collection ][ index ] = parseEnforced(this, tmpCollections[ collection ][ index ])
                          } else {
                              if (typeof(this[prop]) == 'undefined') {
                                  delete tmpCollections[ collection ][ index ]
                              }
                          }
                      }
  
                      collections[ collection ][ index ] = tmpCollections[ collection ][ index ];
  
                      // saving
                      storage.setItem(bucket, JSON.stringify(collections));
  
                      return collectionFindOne(filter)
  
                  } catch (err) {
                      throw err
                  }
              }
          }
  
  
          return result
      }