Skip to content

Issue with namespace "reset" logic #69

@Pranjali14

Description

@Pranjali14

Steps to reproduce -

  • Create two namespaces for the same application namely - "namespace" and "namespacePersistent".
  • Try to reset "namespace".
  • Observe that even "namespacePersistent" gets reset.

I went through the code and observed that the way the "reset" function is implemented

reset: function (namespace) {
				for (var i = 0, key; i < window[this.engine].length; i++) {
					key = window[this.engine].key(i);
					if (!namespace || key.indexOf(namespace) === 0) {
						this.remove(key);
						i--;
					}
				}
	}

In this case key.indexOf(namespace) === 0 for namespace and namespacePersistent will be true and hence will reset both the namespaces.

Solution :
We can use a combination of namespace and delimiter for finding the index.
Considering the default delimiter as ' . ' a namespace delimiter combination will not return 0

let key = 'namespacePersistent.key1' ;
key.indexOf("namespace.") === 0 // false since index returned will be -1.

We can pass the namespace and delimiter combination from the callee.

reset: function (options) {
				options = Basil.utils.extend({}, this.options, options);
				Basil.utils.tryEach(_toStoragesArray(options.storages), function (storage) {
                                           let namespaceStr = options.namespace+(options.keyDelimiter || '.'); 
					_storages[storage].reset(namespaceStr);
				}, null, this);
			},

If this solution is looks fine I can raise a PR for the same.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions