From 86b9bff09a51b17151efa5ec322cddcc50a54cb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jovan=20Kruni=C4=87?= Date: Fri, 14 Dec 2018 14:47:20 +0100 Subject: [PATCH] feat(storage): add search using regex --- src/app/modules/storage/storage.provider.spec.ts | 7 +++++++ src/app/modules/storage/storage.provider.ts | 15 +++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/app/modules/storage/storage.provider.spec.ts b/src/app/modules/storage/storage.provider.spec.ts index 27da31d5..1ebe6268 100644 --- a/src/app/modules/storage/storage.provider.spec.ts +++ b/src/app/modules/storage/storage.provider.spec.ts @@ -153,4 +153,11 @@ describe('StorageProvider', () => { expect(await storageProvider.has('foo')).toBeTruthy(); expect(await storageProvider.has('something-else')).toBeFalsy(); }); + + it('should allow search by regex', async () => { + await storageProvider.putMultiple(sampleEntries); + const found: Map = await storageProvider.search(/bar/); + expect(Array.from(found.keys()).sort()).toEqual(['bar', 'foobar']); + expect(Array.from(found.values())).toEqual([{foo: 'BarFoo'}, 123]); + }); }); diff --git a/src/app/modules/storage/storage.provider.ts b/src/app/modules/storage/storage.provider.ts index 832f0f00..d7a84350 100644 --- a/src/app/modules/storage/storage.provider.ts +++ b/src/app/modules/storage/storage.provider.ts @@ -53,6 +53,21 @@ export class StorageProvider { return entry; } + /** + * Gets values from the storage using the provided regex + * + * @param pattern Regular expression to test existing storage keys with + */ + async search(pattern: RegExp): Promise> { + const map: Map = new Map(); + await this.storage.forEach((value, key) => { + if (pattern.test(key)) { + map.set(key, value); + } + }); + return map; + } + /** * Deletes a storage entry using the key used to save it *