From 1beb2c7548d0c34c540fc78709b20772c9a4c0b2 Mon Sep 17 00:00:00 2001 From: bourgeoa Date: Sat, 3 Feb 2024 22:52:06 +0100 Subject: [PATCH 1/2] removeMetadata --- src/store.ts | 43 +++++++++++++++++++++++-------- tests/unit/update-manager-test.js | 15 ++++++++--- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/src/store.ts b/src/store.ts index 1b4714958..0ba524261 100644 --- a/src/store.ts +++ b/src/store.ts @@ -871,25 +871,46 @@ export default class IndexedFormula extends Formula { // IN future - allow pass } /** - * Removes all statements in a doc, along with the related metadata including request/response + * Removes all metadata * @param doc - The document / graph */ - removeDocument(doc: Quad_Graph): IndexedFormula { - const meta = this.sym('chrome://TheCurrentSession') // or this.rdfFactory.namedNode('chrome://TheCurrentSession') - const linkNamespaceURI = 'http://www.w3.org/2007/ont/link#' // alain - // remove request/response and metadata - const requests = this.statementsMatching(undefined, this.sym(`${linkNamespaceURI}requestedURI`), this.rdfFactory.literal(doc.value), meta).map(st => st.subject) + removeMetadata(doc: Quad_Graph): IndexedFormula { + const meta = this.fetcher?.appNode // this.sym('chrome://TheCurrentSession') + const linkNamespaceURI = 'http://www.w3.org/2007/ont/link#' + const kb = this + // removeMatches() --> removeMany() --> remove() fails on Collection + function removeBySubject (subject) { + const sts = kb.statementsMatching(subject, null, null, meta) + // console.log(sts) + for (var i = 0; i < sts.length; i++) { + kb.removeStatement(sts[i]) + } + } + const requests = this.statementsMatching(null, this.sym(`${linkNamespaceURI}requestedURI`), this.rdfFactory.literal(doc.value), meta).map(st => st.subject) for (var r = 0; r < requests.length; r++) { const request = requests[r] - if (request !== undefined) { - this.removeMatches(request, null, null, meta) + if (request != null) { // null or undefined const response = this.any(request, this.sym(`${linkNamespaceURI}response`), null, meta) as Quad_Subject - if (response !== undefined) { // ts - this.removeMatches(response, null, null, meta) + // console.log('REQUEST ' + request.value) + removeBySubject(request) + if (response != null) { // null or undefined + // console.log('RESPONSE ' + response.value) + removeBySubject(response) } } } - this.removeMatches(this.sym(doc.value), null, null, meta) // content-type + // console.log('DOCTYPE ' + doc.value) + removeBySubject(doc) + return this + } + + /** + * Removes all statements in a doc, along with the related metadata including request/response + * @param doc - The document / graph + */ + removeDocument(doc: Quad_Graph): IndexedFormula { + // remove request/response and metadata + this.removeMetadata(doc) // remove document var sts: Quad[] = this.statementsMatching(undefined, undefined, undefined, doc).slice() // Take a copy as this is the actual index diff --git a/tests/unit/update-manager-test.js b/tests/unit/update-manager-test.js index 9320e6519..d0dff1342 100644 --- a/tests/unit/update-manager-test.js +++ b/tests/unit/update-manager-test.js @@ -223,6 +223,17 @@ describe('UpdateManager', () => { expect(updater.editable(doc1)).to.equal(undefined) }) + it('Should not detect a document is editable from metadata after removeMetadata', () => { + loadMeta(updater.store) + updater.store.removeMetadata(doc1) + expect(updater.editable(doc1)).to.equal(undefined) + }) + + it('Should not detect a document is editable from metadata after removeDocument', () => { + loadMeta(updater.store) + updater.store.removeDocument(doc1) + expect(updater.editable(doc1)).to.equal(undefined) + }) it('Async version should detect a document is editable from metadata', async () => { loadMeta(updater.store) @@ -233,13 +244,9 @@ describe('UpdateManager', () => { it('Async version should not detect a document is editable from metadata after flush', async () => { loadMeta(updater.store) - expect(updater.editable(doc1)).to.equal('SPARQL') - updater.flagAuthorizationMetadata() - const result = await updater.checkEditable(doc1) - expect(result).to.equal(undefined) }) From 9ca72b5c8aa2de3eb3082be65a4138c79aa8ca97 Mon Sep 17 00:00:00 2001 From: bourgeoa Date: Wed, 28 Feb 2024 17:32:31 +0100 Subject: [PATCH 2/2] add commment --- src/store.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/store.ts b/src/store.ts index 0ba524261..b9f467eaf 100644 --- a/src/store.ts +++ b/src/store.ts @@ -875,6 +875,7 @@ export default class IndexedFormula extends Formula { // IN future - allow pass * @param doc - The document / graph */ removeMetadata(doc: Quad_Graph): IndexedFormula { + // temporary until the issue on COLLECTION is resolved see https://github.com/linkeddata/rdflib.js/issues/631 const meta = this.fetcher?.appNode // this.sym('chrome://TheCurrentSession') const linkNamespaceURI = 'http://www.w3.org/2007/ont/link#' const kb = this