Skip to content

Issue with namespace "reset" logic #69

Open

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.

Activity

  1. guillaumepotier commented on May 19, 2020

    @guillaumepotier
    Member

    Hi @Pranjali14

    Thanks for this issue, very clear and even with envisaged solution :)

    Indeed, we could easily replace key.indexOf(namespace) === 0 by key.indexOf(namespace + (options.keyDelimiter || '.' )) === 0 to ensure being more strict and make your case working.

    Would you made making a PR with that change, and if possible, even with a test in the test suite (with your above example?)

    Thanks

  2. Pranjali14 commented on May 19, 2020

    @Pranjali14
    Author

    Sure @guillaumepotier will make the changes and update the test suite as well.

    Thanks

  3. Pranjali14 commented on Jun 15, 2020

    @Pranjali14
    Author

    Hi @guillaumepotier,

    I have raised a PR for this issue.

    Thanks,
    Pranjali

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions