diff --git a/src/Lepiter-Store/FileLocator.extension.st b/src/Lepiter-Store/FileLocator.extension.st index e4131ee6..d2b6aea1 100644 --- a/src/Lepiter-Store/FileLocator.extension.st +++ b/src/Lepiter-Store/FileLocator.extension.st @@ -13,6 +13,12 @@ FileLocator >> asLepiterZnUrl [ ] +{ #category : #'*Lepiter-Store' } +FileLocator class >> deSerializeAllImplementorsInstances [ + + ^ #() +] + { #category : #'*Lepiter-Store' } FileLocator class >> leFromJsonV4Dictionary: aDictionary [ "Create a new instance of the receiver from the supplied dictionary." diff --git a/src/Lepiter-Store/FileReference.extension.st b/src/Lepiter-Store/FileReference.extension.st index a4224f56..d8e019cb 100644 --- a/src/Lepiter-Store/FileReference.extension.st +++ b/src/Lepiter-Store/FileReference.extension.st @@ -9,6 +9,12 @@ FileReference >> asLepiterZnUrl [ ] +{ #category : #'*Lepiter-Store' } +FileReference class >> deSerializeAllImplementorsInstances [ + + ^ #() +] + { #category : #'*Lepiter-Store' } FileReference class >> leFromJsonV3Dictionary: aDictionary [ "Create a new instance of the receiver from the supplied dictionary." diff --git a/src/Lepiter-Store/Fraction.extension.st b/src/Lepiter-Store/Fraction.extension.st index c6d73c4e..ef4ae68f 100644 --- a/src/Lepiter-Store/Fraction.extension.st +++ b/src/Lepiter-Store/Fraction.extension.st @@ -1,5 +1,11 @@ Extension { #name : #Fraction } +{ #category : #'*Lepiter-Store' } +Fraction class >> deSerializeAllImplementorsInstances [ + + ^ #() +] + { #category : #'*Lepiter-Store' } Fraction class >> leFromJsonV4Dictionary: aDictionary [ "Create a new instance of the receiver from the supplied dictionary. diff --git a/src/Lepiter-Store/GtPackageExampleGroup.extension.st b/src/Lepiter-Store/GtPackageExampleGroup.extension.st new file mode 100644 index 00000000..d092f974 --- /dev/null +++ b/src/Lepiter-Store/GtPackageExampleGroup.extension.st @@ -0,0 +1,7 @@ +Extension { #name : #GtPackageExampleGroup } + +{ #category : #'*Lepiter-Store' } +GtPackageExampleGroup class >> deSerializeAllImplementorsInstances [ + + ^ #() +] diff --git a/src/Lepiter-Store/LeBinaryContentsHash.class.st b/src/Lepiter-Store/LeBinaryContentsHash.class.st index dd4cca7f..09e39436 100644 --- a/src/Lepiter-Store/LeBinaryContentsHash.class.st +++ b/src/Lepiter-Store/LeBinaryContentsHash.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'hex' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #factory } diff --git a/src/Lepiter-Store/LeContentAttributesReloadExamples.class.st b/src/Lepiter-Store/LeContentAttributesReloadExamples.class.st index d744f6d7..c714ae4e 100644 --- a/src/Lepiter-Store/LeContentAttributesReloadExamples.class.st +++ b/src/Lepiter-Store/LeContentAttributesReloadExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeContentAttributesReloadExamples, #superclass : #Object, - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #examples } diff --git a/src/Lepiter-Store/LeContentAttributesReloader.class.st b/src/Lepiter-Store/LeContentAttributesReloader.class.st index 3b60c658..4b5d093c 100644 --- a/src/Lepiter-Store/LeContentAttributesReloader.class.st +++ b/src/Lepiter-Store/LeContentAttributesReloader.class.st @@ -5,7 +5,7 @@ Class { 'targetContent', 'changedAttributes' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LeDBLoadError.class.st b/src/Lepiter-Store/LeDBLoadError.class.st index 305f7970..10b17e7d 100644 --- a/src/Lepiter-Store/LeDBLoadError.class.st +++ b/src/Lepiter-Store/LeDBLoadError.class.st @@ -12,7 +12,7 @@ Class { 'properties', 'pageTitle' ], - #category : #'Lepiter-Store-Exceptions' + #category : 'Lepiter-Store-Exceptions' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseAboutToReload.class.st b/src/Lepiter-Store/LeDatabaseAboutToReload.class.st index b85a09bd..5442744d 100644 --- a/src/Lepiter-Store/LeDatabaseAboutToReload.class.st +++ b/src/Lepiter-Store/LeDatabaseAboutToReload.class.st @@ -5,7 +5,7 @@ Class { 'database', 'logicalDatabase' ], - #category : #'Lepiter-Store-Reload - Announcements' + #category : 'Lepiter-Store-Reload - Announcements' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseAlwaysReloadReason.class.st b/src/Lepiter-Store/LeDatabaseAlwaysReloadReason.class.st index 39b14ea5..79f377a5 100644 --- a/src/Lepiter-Store/LeDatabaseAlwaysReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseAlwaysReloadReason.class.st @@ -1,7 +1,7 @@ Class { #name : #LeDatabaseAlwaysReloadReason, #superclass : #LeDatabaseReloadReason, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #printing } diff --git a/src/Lepiter-Store/LeDatabaseContentReloadErrorStrategy.class.st b/src/Lepiter-Store/LeDatabaseContentReloadErrorStrategy.class.st index a0bc8214..f87936e9 100644 --- a/src/Lepiter-Store/LeDatabaseContentReloadErrorStrategy.class.st +++ b/src/Lepiter-Store/LeDatabaseContentReloadErrorStrategy.class.st @@ -10,7 +10,7 @@ Subclasses can also make use of two callback methods ({{gtMethod:LeDatabaseConte Class { #name : #LeDatabaseContentReloadErrorStrategy, #superclass : #Object, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseFileChangedReloadReason.class.st b/src/Lepiter-Store/LeDatabaseFileChangedReloadReason.class.st index fd25231c..62e47481 100644 --- a/src/Lepiter-Store/LeDatabaseFileChangedReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseFileChangedReloadReason.class.st @@ -6,7 +6,7 @@ Class { 'modelHash', 'storageHash' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #'gt - extensions' } diff --git a/src/Lepiter-Store/LeDatabaseIsReloadNecessaryChecker.class.st b/src/Lepiter-Store/LeDatabaseIsReloadNecessaryChecker.class.st index a6590501..0a84f9c1 100644 --- a/src/Lepiter-Store/LeDatabaseIsReloadNecessaryChecker.class.st +++ b/src/Lepiter-Store/LeDatabaseIsReloadNecessaryChecker.class.st @@ -7,7 +7,7 @@ Class { #classVars : [ 'ReloadAlways' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #evaluation } diff --git a/src/Lepiter-Store/LeDatabaseMissingHashReloadReason.class.st b/src/Lepiter-Store/LeDatabaseMissingHashReloadReason.class.st index 6f44a40a..41fac395 100644 --- a/src/Lepiter-Store/LeDatabaseMissingHashReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseMissingHashReloadReason.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'model' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #printing } diff --git a/src/Lepiter-Store/LeDatabaseNewPagesReloadReason.class.st b/src/Lepiter-Store/LeDatabaseNewPagesReloadReason.class.st index 2da0c16f..69c5bf7e 100644 --- a/src/Lepiter-Store/LeDatabaseNewPagesReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseNewPagesReloadReason.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'pageUIDs' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #printing } diff --git a/src/Lepiter-Store/LeDatabasePropertiesChangedReloadReason.class.st b/src/Lepiter-Store/LeDatabasePropertiesChangedReloadReason.class.st index 5d1f21ae..ff52e01c 100644 --- a/src/Lepiter-Store/LeDatabasePropertiesChangedReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabasePropertiesChangedReloadReason.class.st @@ -5,7 +5,7 @@ Class { 'currentProperties', 'storageProperties' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabasePropertiesExamples.class.st b/src/Lepiter-Store/LeDatabasePropertiesExamples.class.st index 95c49be0..8bc5872e 100644 --- a/src/Lepiter-Store/LeDatabasePropertiesExamples.class.st +++ b/src/Lepiter-Store/LeDatabasePropertiesExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeDatabasePropertiesExamples, #superclass : #Object, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #example } diff --git a/src/Lepiter-Store/LeDatabasePropertyExamples.class.st b/src/Lepiter-Store/LeDatabasePropertyExamples.class.st index cacc861a..560fa3e1 100644 --- a/src/Lepiter-Store/LeDatabasePropertyExamples.class.st +++ b/src/Lepiter-Store/LeDatabasePropertyExamples.class.st @@ -1,51 +1,51 @@ Class { #name : #LeDatabasePropertyExamples, #superclass : #LeLocalExamples, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #examples } -LeDatabasePropertyExamples >> databaseWithPersonalInfo [ - "Check the personal information saved to disk when savePersonalInformation is true" +LeDatabasePropertyExamples >> databaseWithoutPersonalInfo [ + "Confirm that attachment properties don't include personal information when saved to disk" - | testAttachment pathString properties dbProperties | + | testAttachment pathString properties | memStore := FileSystem memory root / 'db'. memStore ensureCreateDirectory. testAttachment := memStore parent / 'test.attachment'. testAttachment ensureCreateFile. database := LeLocalStoreLoad current loadAndMonitorFrom: memStore. - database monitor savePersonalInformation: true. pathString := database addAttachmentByCopy: testAttachment. properties := STONJSON fromString: ((memStore / pathString) parent / LeAttachment basename) contents. - dbProperties := STONJSON - fromString: (memStore / database properties propertiesBasename) contents. - - self assert: (dbProperties at: #savePersonalInformation) equals: true. - self assert: (properties includesKey: #originalReference). - self - assert: ((properties at: #originalReference) at: #filename) - equals: '/test.attachment' + self deny: (properties includesKey: #originalReference) ] { #category : #examples } -LeDatabasePropertyExamples >> databaseWithoutPersonalInfo [ - "Confirm that attachment properties don't include personal information when saved to disk" +LeDatabasePropertyExamples >> databaseWithPersonalInfo [ + "Check the personal information saved to disk when savePersonalInformation is true" - | testAttachment pathString properties | + | testAttachment pathString properties dbProperties | memStore := FileSystem memory root / 'db'. memStore ensureCreateDirectory. testAttachment := memStore parent / 'test.attachment'. testAttachment ensureCreateFile. database := LeLocalStoreLoad current loadAndMonitorFrom: memStore. + database monitor savePersonalInformation: true. pathString := database addAttachmentByCopy: testAttachment. properties := STONJSON fromString: ((memStore / pathString) parent / LeAttachment basename) contents. - self deny: (properties includesKey: #originalReference) + dbProperties := STONJSON + fromString: (memStore / database properties propertiesBasename) contents. + + self assert: (dbProperties at: #savePersonalInformation) equals: true. + self assert: (properties includesKey: #originalReference). + self + assert: ((properties at: #originalReference) at: #filename) + equals: '/test.attachment' ] diff --git a/src/Lepiter-Store/LeDatabaseReload.class.st b/src/Lepiter-Store/LeDatabaseReload.class.st index 64f678ad..f2459b05 100644 --- a/src/Lepiter-Store/LeDatabaseReload.class.st +++ b/src/Lepiter-Store/LeDatabaseReload.class.st @@ -25,7 +25,7 @@ Class { 'shouldDeletePages', 'contentReloadErrorStrategy' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseReloadReason.class.st b/src/Lepiter-Store/LeDatabaseReloadReason.class.st index 2046de4c..5bfc686d 100644 --- a/src/Lepiter-Store/LeDatabaseReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseReloadReason.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseReloaded.class.st b/src/Lepiter-Store/LeDatabaseReloaded.class.st index 198409b6..3caab3fa 100644 --- a/src/Lepiter-Store/LeDatabaseReloaded.class.st +++ b/src/Lepiter-Store/LeDatabaseReloaded.class.st @@ -5,7 +5,7 @@ Class { 'database', 'logicalDatabase' ], - #category : #'Lepiter-Store-Reload - Announcements' + #category : 'Lepiter-Store-Reload - Announcements' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeDatabaseStore.class.st b/src/Lepiter-Store/LeDatabaseStore.class.st index 9895548b..81e943b9 100644 --- a/src/Lepiter-Store/LeDatabaseStore.class.st +++ b/src/Lepiter-Store/LeDatabaseStore.class.st @@ -6,7 +6,7 @@ Class { 'storage', 'dbProperties' ], - #category : #'Lepiter-Store-Model' + #category : 'Lepiter-Store-Model' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LeDatabaseUpToDateReloadReason.class.st b/src/Lepiter-Store/LeDatabaseUpToDateReloadReason.class.st index 0491daf0..1b36262c 100644 --- a/src/Lepiter-Store/LeDatabaseUpToDateReloadReason.class.st +++ b/src/Lepiter-Store/LeDatabaseUpToDateReloadReason.class.st @@ -1,7 +1,7 @@ Class { #name : #LeDatabaseUpToDateReloadReason, #superclass : #LeDatabaseReloadReason, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #printing } diff --git a/src/Lepiter-Store/LeDatabaseWithLocalMonitorExamples.class.st b/src/Lepiter-Store/LeDatabaseWithLocalMonitorExamples.class.st index 4094209d..9bcda146 100644 --- a/src/Lepiter-Store/LeDatabaseWithLocalMonitorExamples.class.st +++ b/src/Lepiter-Store/LeDatabaseWithLocalMonitorExamples.class.st @@ -5,7 +5,7 @@ I am used by other examples, providing a {{gtClass:LeDatabase}} with {{gtClass:L Class { #name : #LeDatabaseWithLocalMonitorExamples, #superclass : #Object, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #'examples - database' } diff --git a/src/Lepiter-Store/LeDbVersion.class.st b/src/Lepiter-Store/LeDbVersion.class.st index 2a895b09..07a99e2a 100644 --- a/src/Lepiter-Store/LeDbVersion.class.st +++ b/src/Lepiter-Store/LeDbVersion.class.st @@ -27,7 +27,7 @@ Class { 'major', 'minor' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LeForkDebuggerContentReloadErrorStrategy.class.st b/src/Lepiter-Store/LeForkDebuggerContentReloadErrorStrategy.class.st index ac4793ec..5c97cedf 100644 --- a/src/Lepiter-Store/LeForkDebuggerContentReloadErrorStrategy.class.st +++ b/src/Lepiter-Store/LeForkDebuggerContentReloadErrorStrategy.class.st @@ -5,7 +5,7 @@ If there is no handler, it forks the exception so the load can continue. Class { #name : #LeForkDebuggerContentReloadErrorStrategy, #superclass : #LeDatabaseContentReloadErrorStrategy, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #action } diff --git a/src/Lepiter-Store/LeJsonV3.class.st b/src/Lepiter-Store/LeJsonV3.class.st index db6078b0..8e75dede 100644 --- a/src/Lepiter-Store/LeJsonV3.class.st +++ b/src/Lepiter-Store/LeJsonV3.class.st @@ -21,7 +21,7 @@ Class { #superclass : #Object, #traits : 'TGtUniqueInstance', #classTraits : 'TGtUniqueInstance classTrait', - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #private } diff --git a/src/Lepiter-Store/LeJsonV3000Updater.class.st b/src/Lepiter-Store/LeJsonV3000Updater.class.st index 9738a7d6..c6ac7314 100644 --- a/src/Lepiter-Store/LeJsonV3000Updater.class.st +++ b/src/Lepiter-Store/LeJsonV3000Updater.class.st @@ -1,7 +1,7 @@ Class { #name : #LeJsonV3000Updater, #superclass : #LeJsonV3SchemaUpdater, - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #'accessing structure variables' } diff --git a/src/Lepiter-Store/LeJsonV3001Updater.class.st b/src/Lepiter-Store/LeJsonV3001Updater.class.st index 5afba002..e5e92333 100644 --- a/src/Lepiter-Store/LeJsonV3001Updater.class.st +++ b/src/Lepiter-Store/LeJsonV3001Updater.class.st @@ -1,7 +1,7 @@ Class { #name : #LeJsonV3001Updater, #superclass : #LeJsonV3SchemaUpdater, - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #'accessing structure variables' } diff --git a/src/Lepiter-Store/LeJsonV3002Updater.class.st b/src/Lepiter-Store/LeJsonV3002Updater.class.st index 5a1e8034..1971bf7e 100644 --- a/src/Lepiter-Store/LeJsonV3002Updater.class.st +++ b/src/Lepiter-Store/LeJsonV3002Updater.class.st @@ -5,7 +5,7 @@ Upgrade to V4.0. Class { #name : #LeJsonV3002Updater, #superclass : #LeJsonV3SchemaUpdater, - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeJsonV3003Updater.class.st b/src/Lepiter-Store/LeJsonV3003Updater.class.st index 4b8da4cc..a5db7b6c 100644 --- a/src/Lepiter-Store/LeJsonV3003Updater.class.st +++ b/src/Lepiter-Store/LeJsonV3003Updater.class.st @@ -7,7 +7,7 @@ Upgrade 3.3 to 4.0. Class { #name : #LeJsonV3003Updater, #superclass : #LeJsonV3SchemaUpdater, - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeJsonV3Examples.class.st b/src/Lepiter-Store/LeJsonV3Examples.class.st index bbeeb2b3..642c4e47 100644 --- a/src/Lepiter-Store/LeJsonV3Examples.class.st +++ b/src/Lepiter-Store/LeJsonV3Examples.class.st @@ -8,7 +8,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #private } diff --git a/src/Lepiter-Store/LeJsonV3Reader.class.st b/src/Lepiter-Store/LeJsonV3Reader.class.st index 4e505b88..46751f97 100644 --- a/src/Lepiter-Store/LeJsonV3Reader.class.st +++ b/src/Lepiter-Store/LeJsonV3Reader.class.st @@ -31,7 +31,7 @@ Class { 'objects', 'typeMap' ], - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #mapping } diff --git a/src/Lepiter-Store/LeJsonV3SchemaUpdater.class.st b/src/Lepiter-Store/LeJsonV3SchemaUpdater.class.st index d0cf1480..119c13e6 100644 --- a/src/Lepiter-Store/LeJsonV3SchemaUpdater.class.st +++ b/src/Lepiter-Store/LeJsonV3SchemaUpdater.class.st @@ -9,7 +9,7 @@ A subclass is created for each step of the upgrade, allowing the database to be Class { #name : #LeJsonV3SchemaUpdater, #superclass : #Object, - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #'private - accessing' } diff --git a/src/Lepiter-Store/LeJsonV3Writer.class.st b/src/Lepiter-Store/LeJsonV3Writer.class.st index 462a9247..fe10f29e 100644 --- a/src/Lepiter-Store/LeJsonV3Writer.class.st +++ b/src/Lepiter-Store/LeJsonV3Writer.class.st @@ -17,7 +17,7 @@ Class { #instVars : [ 'firstMappedObject' ], - #category : #'Lepiter-Store-JSONV3' + #category : 'Lepiter-Store-JSONV3' } { #category : #'initialize-release' } diff --git a/src/Lepiter-Store/LeJsonV4.class.st b/src/Lepiter-Store/LeJsonV4.class.st index 6a2196d6..6e714ba1 100644 --- a/src/Lepiter-Store/LeJsonV4.class.st +++ b/src/Lepiter-Store/LeJsonV4.class.st @@ -8,9 +8,37 @@ Class { 'newWriter', 'mutex' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } +{ #category : #maintenance } +LeJsonV4 class >> addExplicitMappingFor: aClass to: selector [ + "Add the supplied class and all its subclasses to the specified pre-existing list of class names" + | existingNames newNames source protocol | + + existingNames := selector value: self. + newNames := aClass withAllSubclasses collect: #name. + protocol := (self class >> selector) protocol. + source := String streamContents: [ :stream | + stream + << selector; cr; + tab; + << ''; cr; + cr; + tab; + << '^ '; + << (existingNames, newNames) asSet asArray sorted storeString ]. + self class compile: source classified: protocol. + self cleanUp. +] + +{ #category : #accessing } +LeJsonV4 class >> explicitClassNamesToMap [ + + + ^ #(#AsyncFuturePendingTaskSignal #AsyncFutureSignal #BeaconLoggerSignal #BeaconSignal #BlBeaconTaskSignal #BlDevScripterSignal #BlDevScripterStepAboutToPlaySignal #BlDevScripterStepExceptionSignal #BlDevScripterStepFinishedSignal #BlDevScripterStepPulsationFinishedSignal #BlDevScripterStepPulsationTimeoutedSignal #BlDevScripterStepSignal #BlDragAndDropSignal #BlDragToSignal #BlElementDetachCompositionLayerSignal #BlElementNamedChildNotFoundSignal #BlElementNotFocusableSignal #BlElementOffsetCompositionLayerSignal #BlElementSignal #BlGotFocusSignal #BlImageCacheSignal #BlInfiniteDataSourceChangedSignal #BlInfiniteDataSourceItemsChangedSignal #BlInfiniteDataSourceSignal #BlInfiniteElementSignal #BlInfiniteLinearLayoutSignal #BlInfiniteLinearLayoutStateClearScrapSignal #BlInfiniteLinearLayoutStateSetScrapSignal #BlInfiniteRecyclerAboutToBindHolderForPositionSignal #BlInfiniteRecyclerAboutToRecycleInPoolSignal #BlInfiniteRecyclerAddedToAttachedScrapSignal #BlInfiniteRecyclerAddedToChangedScrapSignal #BlInfiniteRecyclerClearedAttachedScrapSignal #BlInfiniteRecyclerFetchHolderSignal #BlInfiniteRecyclerSignal #BlLostFocusSignal #BlMarkElementNeedsPaintSignal #BlNonUIProcessSignal #BlParallelUniverseDeferredActionAddedSignal #BlParallelUniverseHostSpaceCreatedSignal #BlParallelUniverseHostSpaceShownSignal #BlParallelUniverseHostStartedSignal #BlParallelUniverseHostStartRequestSignal #BlParallelUniverseOpenSpaceRequestSignal #BlParallelUniverseRunDeferredActionSignal #BlParallelUniverseSignal #BlParallelUniverseSpaceAddedSignal #BlParallelUniverseSpaceDetachSignal #BlParallelUniverseSpaceDispatchAddedToSceneSignal #BlParallelUniverseSpaceRootAssignedSignal #BlParallelUniverseSpaceSignal #BlParallelUniverseTryToRunDeferredActionsSignal #BlPulseStatSignal #BlRequestLayoutSignal #BlSpaceDetachedSignal #BlSpaceHostChangeSignal #BlSpaceRenderedSignal #BlSpaceRenderSignal #BlSpaceSignal #BlSpartaSpaceRendererInitializeSignal #BlTaskExecutionSignal #BlTextStylerRequestedSignal #BrAsyncElementFutureAboutToCancelPromiseSignal #BrAsyncElementFutureCompletedSuccessfullySignal #BrAsyncElementFutureReceivedSignal #BrAsyncElementFutureScheduledSignal #BrAsyncElementFutureSignal #BrAsyncElementFutureSkippedFutureSignal #BrAsyncElementFutureTerminatedUnsuccessfullySignal #BrAsyncElementFutureUpdateElementSignal #BrAsyncElementFutureUpdateElementSkippedSignal #BrAsyncElementPromiseElementUpdateSignal #BrAsyncElementPromiseInitializeElementErrorSignal #BrAsyncElementPromiseInitializeElementSignal #BrAsyncElementPromiseInitializeElementSuccessSignal #BrAsyncElementPromiseRequestUpdateSignal #BrAsyncElementPromiseSignal #BrCursorOutOfRangeSignal #BrElementUpdaterElementMayUpdateSignal #BrElementUpdaterEnqueuePostponedUpdateSignal #BrElementUpdaterEnqueueUpdateSignal #BrElementUpdaterPerformUpdateSignal #BrElementUpdaterSignal #BrTextEditorAttributesModifiedSignal #BrTextEditorCommandSignal #BrTextEditorHolderCommandSignal #BrTextEditorRecordDeselectionSignal #BrTextEditorRecordSelectionSignal #BrTextEditorResetCacheSignal #BrTextEditorSegmentAdornmentErrorSignal #BrTextEditorSegmentBuildSignal #BrTextEditorSegmentRecycleSignal #BrTextEditorSegmentSignal #BrTextEditorSegmentUpdateSignal #BrTextEditorSignal #BrTextStylerAsyncStrategySignal #BrTextStylerAsyncStylingFinished #BrTextStylerAsyncStylingStarted #BrTextStylerAsyncStylingSubmitted #ChromeIdleTimerSignal #ChromeReceivedMessageSignal #ChromeSignal #ChromeStringSignal #ContextStackSignal #CurrentProcessSignal #DAPMessageSignal #DummySignal #ExceptionSignal #GlutinEventSignal #GtAwsCliArgument #GtAwsCliArguments #GtAwsCliFlag #GtAwsWebServiceCommandEndSignal #GtAwsWebServiceCommandSignal #GtAwsWebServiceCommandStartSignal #GtBeaconGenericLogSignal #GtBeaconLabelledLogSignal #GtBeaconLeJsonEncodingErrorSignal #GtBeaconMethodSignal #GtBeaconTypedLogSignal #GtCoderAddOnCreatedSignal #GtCoderAddOnsComputationFinishedSignal #GtCoderAddOnsComputationSignal #GtCoderAddOnsComputationStartedSignal #GtCoderAddOnSignal #GtCoderEvaluationStatusChangedSignal #GtCoderEvaluationStatusShowNotificationSignal #GtCoderIncomingEvaluationStatusSignal #GtCompletionApplyPreviewSignal #GtCompletionCancelPreviewSignal #GtConnectorBasicEventSignal #GtConnectorBasicSignal #GtConnectorContextEventSignal #GtConnectorEventSignal #GtDebuggerPharoMethodIndicatorSignal #GtDebuggerSignal #GtDebuggerStackElementBindCoderViewModelSignal #GtDebuggerStackElementFirstNonFilteredContextFoundSignal #GtDebuggerStackElementFirstNonFilteredContextPreloadSignal #GtDebuggerStackElementOnStackChangedSignal #GtDebuggerStackElementOnUpdateContentSignal #GtDebuggerStackElementOnUpdateDebuggerSignal #GtDebuggerStackElementOnUpdateSessionSignal #GtDeDockerLogEntrySignal #GtDependencyAnalyzerBrokenBaselineSignal #GtEpNilCommentSignal #GtExamplesReportExceptionSignal #GtExamplesReportRetrySignal #GtExamplesReportRunClassSignal #GtExamplesReportRunExampleSignal #GtExamplesReportRunPackageSignal #GtExamplesReportSignal #GtFilterItemsChangedSignal #GtFilterSignal #GtGemStoneBeaconSignal #GtGemStoneClassCategoryChangeCodeSyncSignal #GtGemStoneClassCodeSyncSignal #GtGemStoneClassCommentCodeSyncSignal #GtGemStoneClassDefinitionCodeSyncSignal #GtGemStoneClassRemovalCodeSyncSignal #GtGemStoneClassRenameCodeSyncSignal #GtGemStoneCodeSyncSignal #GtGemStoneCodeSyncStateSignal #GtGemStoneIgnoredCodeSyncSignal #GtGemStoneKeepAlivePollCompletedSignal #GtGemStoneKeepAlivePollSignal #GtGemStoneKeepAlivePollStartedSignal #GtGemStoneKeepAliveSessionCleanSignal #GtGemStoneKeepAliveSessionEndSignal #GtGemStoneKeepAliveSessionErrorSignal #GtGemStoneKeepAliveSessionModifiedSignal #GtGemStoneKeepAliveSessionPollStartedSignal #GtGemStoneKeepAliveSessionSignal #GtGemStoneKeepAliveSignal #GtGemStoneMethodCodeSyncSignal #GtGemStoneSessionAutoCommitSignal #GtGemStoneSessionEvaluationDeliverySignal #GtGemStoneSessionEvaluationDeserializeResultSignal #GtGemStoneSessionEvaluationExecutionEndSignal #GtGemStoneSessionEvaluationExecutionSignal #GtGemStoneSessionEvaluationExecutionStartSignal #GtGemStoneSessionEvaluationPerformExecutionStartSignal #GtGemStoneSessionEvaluationPromiseWaitSignal #GtGemStoneSessionEvaluationResolveBindingsSignal #GtGemStoneSessionEvaluationScriptExecutionStartSignal #GtGemStoneSessionEvaluationSignal #GtGemStoneSessionSignal #GtGitCliContextStackSignal #GtGitCliSignal #GtGradCircleLayoutRadiusSignal #GtGradHierarchicalLayoutCurrentComponentSignal #GtGradHierarchicalLayoutInitialRanksSignal #GtGradHierarchicalLayoutLayeringStageOutputSignal #GtGradKamadaKawaiDistanceMatrixSignal #GtGradKamadaKawaiInitialPositionSetSignal #GtGradKamadaKawaiLayoutDeltasSignal #GtGradProcessingTreeSignal #GtGradTreeLayoutCorrectionSignal #GtGradTreeLayoutNodeProcessingFinishedSignal #GtGradTreeLayoutNodeProcessingStartedSignal #GtGradTreeLayoutOffsetSetSignal #GtInspectorSampleBOneForwardObjectSignal #GtInspectorSelectTabSignal #GtJustContextStackSignal #GtLlmFunctionCallAboutToBePerformedSignal #GtLlmFunctionCallPerformedSignal #GtLlmFunctionCallSignal #GtLlmStylerSignal #GtLoadItemsStackSignal #GtLSPServerInputSignal #GtLSPServerIOSignal #GtLSPServerOutputSignal #GtMondrianEdgeNotCreated #GtMyExampleBeaconSignal #GtMyExampleBeaconStartSignal #GtMyExampleBeaconStopSignal #GtMyExampleLabelledBeaconSignal #GtNetworkNoProxySetSignal #GtNetworkProxyInvalidEnvironmentVariableValueSignal #GtNetworkProxySetSignal #GtNetworkProxySignal #GtNetworkProxyUndefinedEnvironmentVariableSignal #GtNotificationIcebergCredentialsSignal #GtPharoCodersStreamChangedSignal #GtPharoExampleSuiteMediatorSignal #GtPharoFlushChangesFileSignal #GtPharoMethodCoderAddedSignal #GtPharoMethodCoderAnnouncementSignal #GtPharoMethodCoderCompiledSignal #GtPharoMethodCoderModifiedSignal #GtPharoMethodCoderRemovedSignal #GtPharoNewCodersStreamSignal #GtPharoStreamingMethodsChangedSignal #GtPharoStreamingMethodsCoderElementSignal #GtPharoStreamingMethodsFiltersElementStencilDefaultChangedSignal #GtPharoStreamingMethodsScrollToTargetSignal #GtPharoSubscribedToMethodCoderSignal #GtPharoUserMessageSignal #GtPhlowApplyToolSelectionSignal #GtPhlowForwarderFutureElementSignal #GtPhlowStoreToolSelectionSignal #GtRemoteRunnerAnnouncement #GtRemoteRunnerSignal #GtRemoteRunnerTraceAnnouncement #GtRlActionExecutionCompletedSignal #GtRlActionExecutionSignal #GtRlActionExecutionStartedSignal #GtRlActionSignal #GtRlClonerBaselineLoadCompletedSignal #GtRlClonerBaselineLoadSignal #GtRlClonerBaselineLoadStartedSignal #GtRlClonerBaselinePackageLoadSignal #GtRlClonerBaselineSignal #GtRlClonerBaselineSkipLoadSignal #GtRlCreateReleaseActionSignal #GtRlLoaderDirectiveActionExecutionCompletedSignal #GtRlLoaderDirectiveActionExecutionStartedSignal #GtRlLoaderDirectiveActionSignal #GtRlProjectLinkWithRepositorySignal #GtRlProjectReleaseStrategySignal #GtRlProjectReleaseStructureSignal #GtRlReleaseConfigurationSignal #GtRlReleaserSignal #GtRlRepositoryActiveReleaseVersionSignal #GtRlRepositoryPassiveReleaseVersionSignal #GtRrAnnouncementQueueDeliveryAnnouncement #GtRrAnnouncementQueueDeliveryCompletedSignal #GtRrAnnouncementQueueDeliveryInitiatedSignal #GtRrAnnouncementQueuePullCompletedSignal #GtRrAnnouncementQueuePullInitiatedSignal #GtRrAnnouncementQueuePullSignal #GtRrAnnouncementQueueSignal #GtRrChangesSyncRetrievalCompletedSignal #GtRrChangesSyncRetrievalSignal #GtRrChangesSyncRetrievalStartingSignal #GtRrCodeSyncApplyChangeCompletedSignal #GtRrCodeSyncApplyChangeSignal #GtRrCodeSyncApplyChangeStartingSignal #GtRrCodeSyncJobSignal #GtRrCodeSyncSignal #GtRrExampleStringSignal #GtRrJobAnnouncement #GtRrJobCancelledAnnouncement #GtRrJobCompletedAnnouncement #GtRrJobShutdownSignal #GtRrJobStartedAnnouncement #GtRrJobStartupAndShutdownSignal #GtRrJobStartupSignal #GtRrJobTerminatedAnnouncement #GtRrMessageStatsSignal #GtRrMqQueueTaskCompletedSignal #GtRrMqQueueTaskSignal #GtRrMqQueueTaskStartingSignal #GtRrMqTaskMissingSignal #GtRrNextTaskCompletedSignal #GtRrNextTaskFinishedWithWorkerSignal #GtRrNextTaskSignal #GtRrNextTaskStartingSignal #GtRrNextTaskWorkerNotRegisteredSignal #GtRrRegisterWorkerCompletedSignal #GtRrRegisterWorkerRejectedSignal #GtRrRegisterWorkerSignal #GtRrRegisterWorkerStartingSignal #GtRrResultProcessingErrorAnnouncement #GtRrStatusMessageChangedAnnouncement #GtRrStompMqCommandCallbackCompletedSignal #GtRrStompMqCommandCallbackSignal #GtRrStompMqCommandCallbackStartingSignal #GtRrStompMqSendMessageCompletedSignal #GtRrStompMqSendMessageSignal #GtRrStompMqSendMessageStartingSignal #GtRrStompMqTaskCallbackCompletedSignal #GtRrStompMqTaskCallbackSignal #GtRrStompMqTaskCallbackStartingSignal #GtRrStopRegisteredWorkerCompletedSignal #GtRrStopRegisteredWorkersCompletedSignal #GtRrStopRegisteredWorkerSignal #GtRrStopRegisteredWorkersSignal #GtRrStopRegisteredWorkersStartingSignal #GtRrStopRegisteredWorkerStartingSignal #GtRrSyslogSignal #GtRrTaskAnnouncement #GtRrTaskCompletedAnnouncement #GtRrTaskContext #GtRrTaskDoneCompletedSignal #GtRrTaskDoneSignal #GtRrTaskDoneStartingSignal #GtRrTaskFailedAnnouncement #GtRrTaskFinishedAnnouncement #GtRrTaskStartedAnnouncement #GtRrTimeoutAnnouncement #GtRrTimeoutCompletedAnnouncement #GtRrTimeoutScheduledAnnouncement #GtRrTimeoutStartedAnnouncement #GtRrWorkerAnnouncement #GtRrWorkerApplyChangeCompletedSignal #GtRrWorkerApplyChangesCompletedSignal #GtRrWorkerApplyChangeSignal #GtRrWorkerApplyChangesSignal #GtRrWorkerApplyChangesStartingSignal #GtRrWorkerApplyChangeStartingSignal #GtRrWorkerChangesSignal #GtRrWorkerChangesSyncAnnouncement #GtRrWorkerChangesSyncedAnnouncement #GtRrWorkerChangesSyncErrorAnnouncement #GtRrWorkerChangesSyncHaveEventsAnnouncement #GtRrWorkerChangesSyncStartAnnouncement #GtRrWorkerCheckCompletedSignal #GtRrWorkerCheckSignal #GtRrWorkerCheckStartingSignal #GtRrWorkerCliCompletedSignal #GtRrWorkerCliSignal #GtRrWorkerCliStartingSignal #GtRrWorkerCommandAnnouncement #GtRrWorkerCommandCompletedAnnouncement #GtRrWorkerCommandStartedAnnouncement #GtRrWorkerConnection #GtRrWorkerControlChannelRegisteredAnnouncement #GtRrWorkerFilterChangesCompletedSignal #GtRrWorkerFilterChangesSignal #GtRrWorkerFilterChangesStartingSignal #GtRrWorkerHeartbeatCompletedSignal #GtRrWorkerHeartbeatSignal #GtRrWorkerHeatbeatStartingSignal #GtRrWorkerOperationAnnouncement #GtRrWorkerOperationShutdownAnnouncement #GtRrWorkerOperationSignal #GtRrWorkerRegisterCompletedSignal #GtRrWorkerRegisteredAnnouncement #GtRrWorkerRegisterSignal #GtRrWorkerRegisterStartingSignal #GtRrWorkerRegistrationRefusedAnnouncement #GtRrWorkerReplacedAnnouncement #GtRrWorkerResponseConfirmedSignal #GtRrWorkerResponseErrorSignal #GtRrWorkerResponseSentSignal #GtRrWorkerResultEntry #GtRrWorkerRetrieveChangesCompletedSignal #GtRrWorkerRetrieveChangesSignal #GtRrWorkerRetrieveChangesStartingSignal #GtRrWorkerTaskCompletedSignal #GtRrWorkerTaskProcessErrorAnnouncement #GtRrWorkerTaskSignal #GtRrWorkerTaskStartingSignal #GtRrWorkerTimeoutAnnouncement #GtRrWorkerTraceAnnouncement #GtRrWorkerUnregisteredAnnouncement #GtRrWorkerWaitForTaskAnnouncement #GtSourceCoderProcessInDebuggerSignal #GtStrictSymbolEqualityArgumentSignal #GtStylerErrorSignal #GtTextualCoderEditorElementAddedToSceneGraphSignal #GtTextualCoderEditorElementAttachedSpaceSignal #GtTextualCoderEditorElementDetachedSpaceSignal #GtTextualCoderEditorElementRemovedFromSceneGraphSignal #GtTextualCoderEditorElementSignal #GtTextualCoderEditorElementUpdateCursorsSignal #GtTextualCoderEditorElementUpdateStateSignal #GtTextualCoderEditorElementUpdateTextSignal #GtVirtualMachineDebugSignal #GtVirtualMachineErrorSignal #GtVirtualMachineGenericSignal #GtVirtualMachineInfoSignal #GtVirtualMachineLevelSignal #GtVirtualMachineSignal #GtVirtualMachineTraceSignal #GtVirtualMachineWarningSignal #LanguageLinkBrokerHandleMessage #LanguageLinkBrokerSendMessage #LanguageLinkCommandSignal #LanguageLinkCommunicationsSignal #LanguageLinkDeliverCommandSignal #LanguageLinkEventSignal #LanguageLinkMsgPackPharoBrokerSignal #LanguageLinkSendCommandSignal #LanguageLinkSignal #LanguageLinkSocketErrorSignal #LeDatabaseSidebarGroupedListRequestUpdateSelectionSignal #LeDatabaseSidebarGroupedListScrolledToIndexSignal #LeDatabaseSidebarGroupedListUpdateSelectionSignal #LeLocalStoreSignal #LePathFinderSignal #LeReferenceMaintenanceSignal #LeReloadOutOfDateReasonSignal #LeReloadReasonSignal #LeReloadUpToDateReasonSignal #LeTextSnippetUpdateTextAssignSignal #LeTextSnippetUpdateTextScheduleSignal #LeTextSnippetUpdateTextSignal #LeZincSignal #LlEsCheckServerReadyCompletedSignal #LlEsCheckServerReadySignal #LlEsCheckServerReadyStartingSignal #LlEsConnectCompletedSignal #LlEsConnectSignal #LlEsConnectStartingSignal #MethodStackSignal #PharoLinkBadResponseSignal #PharoLinkErrorRequestSignal #PharoLinkEvalSignal #PharoLinkNetworkErrorSignal #PharoLinkRegistryUnknownIdSignal #PharoLinkRequestSignal #PharoLinkResponseSignal #PharoLinkServerSignal #PharoLinkSignal #SkiaPerformanceSignal #SkiaSignal #SkiaStringToTextRunBoundsAsRectangleSignal #SkiaStringToTextRunComputeGlyphsSignal #SkiaStringToTextRunGlyphsAsByteArraySignal #SkiaStringToTextRunSignal #SkiaStringToTextRunUtfConvertionSignal #StampHeartbeatSignal #StampSignals #StreamLoggerFlusherErrorSignal #StringSignal #TaskAtErrorSignal #TelemetrySignal #ThisContextSignal #WrapperSignal #ZnLogEventSignal) +] + { #category : #loading } LeJsonV4 class >> loadFile: aFileReference [ @@ -18,15 +46,26 @@ LeJsonV4 class >> loadFile: aFileReference [ ] { #category : #private } -LeJsonV4 >> allClassMappingsFor: aNeoJSONMapper [ +LeJsonV4 >> allClassMappingsFor: aNeoJSONMapper [ + "Add the class mappings for all supported classes. + Classes are identified either by implementing #leJsonV4Name or being in the #explicitClassNamesToMap list." - (SystemNavigation default allImplementorsOf: #leJsonV4Name) do: [ :method | + "Add classes with #leJsonV4Name" + (SystemNavigation default allImplementorsOf: #leJsonV4Name) do: [ :method | | jsonName | - jsonName := method - gtValueWithReceiver: method methodClass soleInstance - possibleArguments: #(). - jsonName ifNotNil: [ method methodClass instanceSide leJsonV4MappingFor: aNeoJSONMapper ] ]. - + method methodClass isMeta ifTrue: + [ jsonName := method + gtValueWithReceiver: method methodClass soleInstance + possibleArguments: #(). + jsonName ifNotNil: + [ method methodClass instanceSide leJsonV4MappingFor: aNeoJSONMapper ] ] ]. + + "Add classes in #explicitClassNamesToMap" + self explicitClassesToMap do: [ :cls | + | jsonName | + jsonName := cls name asString. + jsonName at: 1 put: jsonName first asLowercase. + cls leJsonV4MappingFor: aNeoJSONMapper named: jsonName ]. ] { #category : #testing } @@ -51,6 +90,18 @@ LeJsonV4 >> deserialize: aStream [ ^ object ] +{ #category : #private } +LeJsonV4 >> explicitClassesToMap [ + | selectors | + + selectors := self class class methods + select: [ :method | method hasPragmaNamed: #leJsonV4ClassNames ] + thenCollect: #selector. + ^ selectors flatCollect: [ :selector | + (selector value: self class) collect: [ :clsName | + self class environment classOrTraitNamed: clsName ] ] +] + { #category : #initialization } LeJsonV4 >> initialize [ diff --git a/src/Lepiter-Store/LeJsonV4000SnippetVisitor.class.st b/src/Lepiter-Store/LeJsonV4000SnippetVisitor.class.st index 06df29cd..db4ee7b7 100644 --- a/src/Lepiter-Store/LeJsonV4000SnippetVisitor.class.st +++ b/src/Lepiter-Store/LeJsonV4000SnippetVisitor.class.st @@ -6,7 +6,7 @@ Class { 'updater', 'substitutions' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #initialization } diff --git a/src/Lepiter-Store/LeJsonV4000Updater.class.st b/src/Lepiter-Store/LeJsonV4000Updater.class.st index 9ab3c846..49ae5a53 100644 --- a/src/Lepiter-Store/LeJsonV4000Updater.class.st +++ b/src/Lepiter-Store/LeJsonV4000Updater.class.st @@ -10,7 +10,7 @@ Class { #instVars : [ 'jsonPage' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #private } diff --git a/src/Lepiter-Store/LeJsonV4Examples.class.st b/src/Lepiter-Store/LeJsonV4Examples.class.st index bea10cb7..2c29ee65 100644 --- a/src/Lepiter-Store/LeJsonV4Examples.class.st +++ b/src/Lepiter-Store/LeJsonV4Examples.class.st @@ -8,7 +8,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #private } diff --git a/src/Lepiter-Store/LeJsonV4IntegrityExamples.class.st b/src/Lepiter-Store/LeJsonV4IntegrityExamples.class.st new file mode 100644 index 00000000..c20ee9b9 --- /dev/null +++ b/src/Lepiter-Store/LeJsonV4IntegrityExamples.class.st @@ -0,0 +1,19 @@ +Class { + #name : #LeJsonV4IntegrityExamples, + #superclass : #Object, + #category : 'Lepiter-Store-Examples' +} + +{ #category : #examples } +LeJsonV4IntegrityExamples >> supportedClassesNotDuplicated [ + "Check that there are no classes that both define #leJsonV4Name and are in LeJsonV4>>explicitClassNamesToMap" + + | leJsonV4NameImplementers explicitClasses common | + + leJsonV4NameImplementers := (SystemNavigation default allImplementorsOf: #leJsonV4Name) collect: [ :method | + method methodClass instanceSide ]. + explicitClasses := LeJsonV4 explicitClassNamesToMap. + common := leJsonV4NameImplementers asSet intersection: explicitClasses asSet. + self assert: common isEmpty description: + [ 'The following classes have duplicate LeJsonV4 definitions: ', common printString ]. +] diff --git a/src/Lepiter-Store/LeJsonV4LogicalPropertiesUpdater.class.st b/src/Lepiter-Store/LeJsonV4LogicalPropertiesUpdater.class.st index cb5f31da..e654f42d 100644 --- a/src/Lepiter-Store/LeJsonV4LogicalPropertiesUpdater.class.st +++ b/src/Lepiter-Store/LeJsonV4LogicalPropertiesUpdater.class.st @@ -23,7 +23,7 @@ The default actions are: Class { #name : #LeJsonV4LogicalPropertiesUpdater, #superclass : #Object, - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #updating } diff --git a/src/Lepiter-Store/LeJsonV4Reader.class.st b/src/Lepiter-Store/LeJsonV4Reader.class.st index 833bc132..7eb7b286 100644 --- a/src/Lepiter-Store/LeJsonV4Reader.class.st +++ b/src/Lepiter-Store/LeJsonV4Reader.class.st @@ -5,7 +5,7 @@ Class { 'objects', 'typeMap' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #mapping } @@ -17,6 +17,15 @@ LeJsonV4Reader >> for: smalltalkClass do: block [ ^ mapping ] +{ #category : #mapping } +LeJsonV4Reader >> for: smalltalkClass named: aSymbol do: block [ + | mapping | + + mapping := super for: smalltalkClass do: block. + typeMap at: aSymbol put: smalltalkClass. + ^ mapping +] + { #category : #'initialize-release' } LeJsonV4Reader >> initialize [ diff --git a/src/Lepiter-Store/LeJsonV4SchemaUpdater.class.st b/src/Lepiter-Store/LeJsonV4SchemaUpdater.class.st index d482499e..c706d49d 100644 --- a/src/Lepiter-Store/LeJsonV4SchemaUpdater.class.st +++ b/src/Lepiter-Store/LeJsonV4SchemaUpdater.class.st @@ -11,7 +11,7 @@ A subclass is created for each step of the upgrade, allowing the database to be Class { #name : #LeJsonV4SchemaUpdater, #superclass : #Object, - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #'private - accessing' } diff --git a/src/Lepiter-Store/LeJsonV4SerialisationExamples.class.st b/src/Lepiter-Store/LeJsonV4SerialisationExamples.class.st index ccd48aac..ad14afbe 100644 --- a/src/Lepiter-Store/LeJsonV4SerialisationExamples.class.st +++ b/src/Lepiter-Store/LeJsonV4SerialisationExamples.class.st @@ -3,7 +3,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #examples } @@ -55,32 +55,26 @@ LeJsonV4SerialisationExamples >> checkInstance: instance [ { #category : #examples } LeJsonV4SerialisationExamples >> deSerializeAllImplementors [ "Perform a basic check on all implementors of #leJsonV4Name that the basic serialisation / deserialisation doesn't raise an error and looks sensible" - - | allImplementors allClasses leJsonV4 clsCount testedCount excludedClasses | + | allImplementors allClasses leJsonV4 clsCount testedCount | + LeJsonV4 cleanUp. + leJsonV4 := LeJsonV4 uniqueInstance. allImplementors := SystemNavigation default allImplementorsOf: #leJsonV4Name. allClasses := allImplementors flatCollect: [ :method | method methodClass instanceSide withAllSubclasses ] as: Set. + allClasses addAll: leJsonV4 explicitClassesToMap. clsCount := allClasses size. testedCount := 0. - leJsonV4 := LeJsonV4 uniqueInstance. "excludedClasses is a set of classes that can't serialise the default instance due to its implementation" - excludedClasses := {FileLocator. - FileReference. - Fraction. - GtPackageExampleGroup. - Point. - ScaledDecimal}. - allClasses removeAll: excludedClasses. "Give developers the chance to exclude classes that are not part of core Gt" (self class methods select: [ :method | method hasPragmaNamed: #leJsonV4ExcludedClasses ]) do: [ :method | allClasses removeAll: (self perform: method selector) ]. allClasses do: [ :cls | - (cls perform: #leJsonV4Name) - ifNotNil: [ cls deSerializeAllImplementorsInstances + ((cls respondsTo: #leJsonV4Name) and: [ (cls perform: #leJsonV4Name) isNotNil ]) + ifTrue: [ cls deSerializeAllImplementorsInstances do: [ :instance | self checkInstance: instance ] ]. testedCount := testedCount + 1 ] ] diff --git a/src/Lepiter-Store/LeJsonV4Writer.class.st b/src/Lepiter-Store/LeJsonV4Writer.class.st index 8657d479..0575663e 100644 --- a/src/Lepiter-Store/LeJsonV4Writer.class.st +++ b/src/Lepiter-Store/LeJsonV4Writer.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'firstMappedObject' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalAbstractProperties.class.st b/src/Lepiter-Store/LeLocalAbstractProperties.class.st index a4c2805e..a5842a26 100644 --- a/src/Lepiter-Store/LeLocalAbstractProperties.class.st +++ b/src/Lepiter-Store/LeLocalAbstractProperties.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalAbstractProperties, #superclass : #Object, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #'api - testing' } diff --git a/src/Lepiter-Store/LeLocalAttachmentAlreadyExist.class.st b/src/Lepiter-Store/LeLocalAttachmentAlreadyExist.class.st index 68d60da6..7ab65bf8 100644 --- a/src/Lepiter-Store/LeLocalAttachmentAlreadyExist.class.st +++ b/src/Lepiter-Store/LeLocalAttachmentAlreadyExist.class.st @@ -5,7 +5,7 @@ Class { 'basename', 'uuid' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalAttachmentDoesNotExist.class.st b/src/Lepiter-Store/LeLocalAttachmentDoesNotExist.class.st index d5cb959b..767cc45a 100644 --- a/src/Lepiter-Store/LeLocalAttachmentDoesNotExist.class.st +++ b/src/Lepiter-Store/LeLocalAttachmentDoesNotExist.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'uuid' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalAttachmentMissingFile.class.st b/src/Lepiter-Store/LeLocalAttachmentMissingFile.class.st index 21e4e90b..60727614 100644 --- a/src/Lepiter-Store/LeLocalAttachmentMissingFile.class.st +++ b/src/Lepiter-Store/LeLocalAttachmentMissingFile.class.st @@ -5,7 +5,7 @@ Class { 'uuid', 'directory' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalExamples.class.st b/src/Lepiter-Store/LeLocalExamples.class.st index 3037302f..03833739 100644 --- a/src/Lepiter-Store/LeLocalExamples.class.st +++ b/src/Lepiter-Store/LeLocalExamples.class.st @@ -34,7 +34,7 @@ Class { 'database', 'memStore' ], - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalJSONStoreShutdown.class.st b/src/Lepiter-Store/LeLocalJSONStoreShutdown.class.st index 58b4f39a..9b2db62c 100644 --- a/src/Lepiter-Store/LeLocalJSONStoreShutdown.class.st +++ b/src/Lepiter-Store/LeLocalJSONStoreShutdown.class.st @@ -6,5 +6,5 @@ Class { #name : #LeLocalJSONStoreShutdown, #superclass : #Announcement, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } diff --git a/src/Lepiter-Store/LeLocalJSONStoreStartup.class.st b/src/Lepiter-Store/LeLocalJSONStoreStartup.class.st index 4eba5d85..254002de 100644 --- a/src/Lepiter-Store/LeLocalJSONStoreStartup.class.st +++ b/src/Lepiter-Store/LeLocalJSONStoreStartup.class.st @@ -6,5 +6,5 @@ Class { #name : #LeLocalJSONStoreStartup, #superclass : #Announcement, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } diff --git a/src/Lepiter-Store/LeLocalJsonV3Storage.class.st b/src/Lepiter-Store/LeLocalJsonV3Storage.class.st index bdc2e09e..aa435ba3 100644 --- a/src/Lepiter-Store/LeLocalJsonV3Storage.class.st +++ b/src/Lepiter-Store/LeLocalJsonV3Storage.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalJsonV3Storage, #superclass : #LeLocalStorage, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #versions } diff --git a/src/Lepiter-Store/LeLocalJsonV4Storage.class.st b/src/Lepiter-Store/LeLocalJsonV4Storage.class.st index 46eaca0d..33bdfc1a 100644 --- a/src/Lepiter-Store/LeLocalJsonV4Storage.class.st +++ b/src/Lepiter-Store/LeLocalJsonV4Storage.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalJsonV4Storage, #superclass : #LeLocalStorage, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #versions } diff --git a/src/Lepiter-Store/LeLocalMonitorExamples.class.st b/src/Lepiter-Store/LeLocalMonitorExamples.class.st index 58b6c801..319efc0d 100644 --- a/src/Lepiter-Store/LeLocalMonitorExamples.class.st +++ b/src/Lepiter-Store/LeLocalMonitorExamples.class.st @@ -9,7 +9,7 @@ Class { #instVars : [ 'monitor' ], - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #'examples - monitor' } diff --git a/src/Lepiter-Store/LeLocalNullProperties.class.st b/src/Lepiter-Store/LeLocalNullProperties.class.st index 4f6e17ef..ed4efefe 100644 --- a/src/Lepiter-Store/LeLocalNullProperties.class.st +++ b/src/Lepiter-Store/LeLocalNullProperties.class.st @@ -3,7 +3,7 @@ Class { #superclass : #LeLocalAbstractProperties, #traits : 'TGtUniqueInstance', #classTraits : 'TGtUniqueInstance classTrait', - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #'api - testing' } diff --git a/src/Lepiter-Store/LeLocalSTONStorage.class.st b/src/Lepiter-Store/LeLocalSTONStorage.class.st index cf5f6cea..5000fa5a 100644 --- a/src/Lepiter-Store/LeLocalSTONStorage.class.st +++ b/src/Lepiter-Store/LeLocalSTONStorage.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalSTONStorage, #superclass : #LeLocalStorage, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #loading } diff --git a/src/Lepiter-Store/LeLocalStorage.class.st b/src/Lepiter-Store/LeLocalStorage.class.st index 953678da..5382777f 100644 --- a/src/Lepiter-Store/LeLocalStorage.class.st +++ b/src/Lepiter-Store/LeLocalStorage.class.st @@ -12,7 +12,7 @@ The database is a directory containing a page per file, with `db.properties` con Class { #name : #LeLocalStorage, #superclass : #Object, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalStorageExamples.class.st b/src/Lepiter-Store/LeLocalStorageExamples.class.st index 4dc84e91..268a9c81 100644 --- a/src/Lepiter-Store/LeLocalStorageExamples.class.st +++ b/src/Lepiter-Store/LeLocalStorageExamples.class.st @@ -3,7 +3,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #examples } diff --git a/src/Lepiter-Store/LeLocalStore.class.st b/src/Lepiter-Store/LeLocalStore.class.st index c98d544f..8580933a 100644 --- a/src/Lepiter-Store/LeLocalStore.class.st +++ b/src/Lepiter-Store/LeLocalStore.class.st @@ -29,7 +29,7 @@ Class { 'localRoot', 'attachmentsDirectory' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } @@ -178,6 +178,21 @@ LeLocalStore >> attachmentProperties: attachmentPath [ ^ LeAttachment loadFrom: attachmentFileReference parent / LeAttachment basename ] +{ #category : #accessing } +LeLocalStore >> attachmentsDirectory [ + ^ attachmentsDirectory +] + +{ #category : #accessing } +LeLocalStore >> attachmentsDirectory: anObject [ + attachmentsDirectory := anObject +] + +{ #category : #accessing } +LeLocalStore >> attachmentsDirectoryName [ + ^ self class attachmentsDirectoryName +] + { #category : #attachments } LeLocalStore >> attachmentUtf8Stream: attachmentPath do: aBlock [ "Answer a stream on the binary contents of the supplied attachment path" @@ -203,21 +218,6 @@ LeLocalStore >> attachmentWithDataForId: aUuid [ metadata: properties ] -{ #category : #accessing } -LeLocalStore >> attachmentsDirectory [ - ^ attachmentsDirectory -] - -{ #category : #accessing } -LeLocalStore >> attachmentsDirectory: anObject [ - attachmentsDirectory := anObject -] - -{ #category : #accessing } -LeLocalStore >> attachmentsDirectoryName [ - ^ self class attachmentsDirectoryName -] - { #category : #accessing } LeLocalStore >> dbPropertiesFile [ ^ localRoot / self propertiesBasename @@ -416,12 +416,6 @@ LeLocalStore >> lookupAttachmentDirectoryAndMetadataFor: aFileReference usingId: ^ attachmentDirectory resolve ] -{ #category : #accessing } -LeLocalStore >> pageFileReference: aLePage [ - - ^ localRoot / (self pageFilename: aLePage) -] - { #category : #accessing } LeLocalStore >> pageFilename: aLePage [ @@ -434,6 +428,12 @@ LeLocalStore >> pageFilenameForId: aLePage [ ^ storage pageFilenameForUid: aLePage ] +{ #category : #accessing } +LeLocalStore >> pageFileReference: aLePage [ + + ^ localRoot / (self pageFilename: aLePage) +] + { #category : #accessing } LeLocalStore >> pageHashFor: aLePage [ diff --git a/src/Lepiter-Store/LeLocalStoreExport.class.st b/src/Lepiter-Store/LeLocalStoreExport.class.st index a8c30dcd..6ea89a5b 100644 --- a/src/Lepiter-Store/LeLocalStoreExport.class.st +++ b/src/Lepiter-Store/LeLocalStoreExport.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalStoreExport, #superclass : #LeLocalStore, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #'api - exporting' } diff --git a/src/Lepiter-Store/LeLocalStoreLoad.class.st b/src/Lepiter-Store/LeLocalStoreLoad.class.st index d93bd4af..8c38a014 100644 --- a/src/Lepiter-Store/LeLocalStoreLoad.class.st +++ b/src/Lepiter-Store/LeLocalStoreLoad.class.st @@ -7,7 +7,7 @@ Class { 'duplicates', 'corrupted' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #testing } diff --git a/src/Lepiter-Store/LeLocalStoreMonitor.class.st b/src/Lepiter-Store/LeLocalStoreMonitor.class.st index c58693a6..f9afcda9 100644 --- a/src/Lepiter-Store/LeLocalStoreMonitor.class.st +++ b/src/Lepiter-Store/LeLocalStoreMonitor.class.st @@ -37,7 +37,7 @@ Class { 'SessionAnnouncer', 'ShutdownMonitor' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #'api - accessing' } diff --git a/src/Lepiter-Store/LeLocalStoreMonitorStarted.class.st b/src/Lepiter-Store/LeLocalStoreMonitorStarted.class.st index 618806e2..ab463db2 100644 --- a/src/Lepiter-Store/LeLocalStoreMonitorStarted.class.st +++ b/src/Lepiter-Store/LeLocalStoreMonitorStarted.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'monitor' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalStoreMonitorStopped.class.st b/src/Lepiter-Store/LeLocalStoreMonitorStopped.class.st index 32f2403d..67aa9f60 100644 --- a/src/Lepiter-Store/LeLocalStoreMonitorStopped.class.st +++ b/src/Lepiter-Store/LeLocalStoreMonitorStopped.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'monitor' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLocalStoreSignal.class.st b/src/Lepiter-Store/LeLocalStoreSignal.class.st index 97d033c9..acd24726 100644 --- a/src/Lepiter-Store/LeLocalStoreSignal.class.st +++ b/src/Lepiter-Store/LeLocalStoreSignal.class.st @@ -9,7 +9,7 @@ Class { 'pageTitle', 'operation' ], - #category : #'Lepiter-Store-LocalJSON-Beacon' + #category : 'Lepiter-Store-LocalJSON-Beacon' } { #category : #testing } diff --git a/src/Lepiter-Store/LeLocalV3001MigrationExamples.class.st b/src/Lepiter-Store/LeLocalV3001MigrationExamples.class.st index a73c83a0..44a031ab 100644 --- a/src/Lepiter-Store/LeLocalV3001MigrationExamples.class.st +++ b/src/Lepiter-Store/LeLocalV3001MigrationExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalV3001MigrationExamples, #superclass : #LeLocalExamples, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #examples } diff --git a/src/Lepiter-Store/LeLocalV3002MigrationExamples.class.st b/src/Lepiter-Store/LeLocalV3002MigrationExamples.class.st index 1253f687..55a8d7c0 100644 --- a/src/Lepiter-Store/LeLocalV3002MigrationExamples.class.st +++ b/src/Lepiter-Store/LeLocalV3002MigrationExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalV3002MigrationExamples, #superclass : #LeLocalExamples, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #examples } diff --git a/src/Lepiter-Store/LeLocalV4000MigrationExamples.class.st b/src/Lepiter-Store/LeLocalV4000MigrationExamples.class.st index c1709017..fc222d23 100644 --- a/src/Lepiter-Store/LeLocalV4000MigrationExamples.class.st +++ b/src/Lepiter-Store/LeLocalV4000MigrationExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLocalV4000MigrationExamples, #superclass : #LeLocalExamples, - #category : #'Lepiter-Store-Local-Examples' + #category : 'Lepiter-Store-Local-Examples' } { #category : #'as yet unclassified' } diff --git a/src/Lepiter-Store/LeLogicalDatabaseAboutToReload.class.st b/src/Lepiter-Store/LeLogicalDatabaseAboutToReload.class.st index 8ff32bd3..a0590fd7 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseAboutToReload.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseAboutToReload.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload - Announcements' + #category : 'Lepiter-Store-Reload - Announcements' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLogicalDatabaseProperties.class.st b/src/Lepiter-Store/LeLogicalDatabaseProperties.class.st index 15ab55d2..b9f6802e 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseProperties.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseProperties.class.st @@ -7,7 +7,7 @@ Class { 'localFile', 'properties' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } @@ -429,23 +429,23 @@ LeLogicalDatabaseProperties >> registeredDatabaseDirectories: aCollection [ ] { #category : #'api - accessing' } -LeLogicalDatabaseProperties >> registeredDatabaseUrls [ +LeLogicalDatabaseProperties >> registeredDatabases [ - ^ (self properties at: 'registeredDatabaseUrls' ifAbsent: [ #() ]) collect: #asZnUrl + ^ self registeredDatabaseUrls collect: [ :each | + (LeDatabaseStore loaderFor: each) current + loadAndMonitorFrom: each ] ] { #category : #'api - accessing' } -LeLogicalDatabaseProperties >> registeredDatabaseUrls: aCollectionOfZnUrl [ +LeLogicalDatabaseProperties >> registeredDatabaseUrls [ - ^ self updateProperty: 'registeredDatabaseUrls' value: (aCollectionOfZnUrl collect: #asString) + ^ (self properties at: 'registeredDatabaseUrls' ifAbsent: [ #() ]) collect: #asZnUrl ] { #category : #'api - accessing' } -LeLogicalDatabaseProperties >> registeredDatabases [ +LeLogicalDatabaseProperties >> registeredDatabaseUrls: aCollectionOfZnUrl [ - ^ self registeredDatabaseUrls collect: [ :each | - (LeDatabaseStore loaderFor: each) current - loadAndMonitorFrom: each ] + ^ self updateProperty: 'registeredDatabaseUrls' value: (aCollectionOfZnUrl collect: #asString) ] { #category : #'api - storage' } diff --git a/src/Lepiter-Store/LeLogicalDatabasePropertiesExamples.class.st b/src/Lepiter-Store/LeLogicalDatabasePropertiesExamples.class.st index fa1a0068..1e852e0c 100644 --- a/src/Lepiter-Store/LeLogicalDatabasePropertiesExamples.class.st +++ b/src/Lepiter-Store/LeLogicalDatabasePropertiesExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LeLogicalDatabasePropertiesExamples, #superclass : #Object, - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #private } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReload.class.st b/src/Lepiter-Store/LeLogicalDatabaseReload.class.st index 8234b8e2..90e62a5b 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReload.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReload.class.st @@ -11,7 +11,7 @@ Class { 'updateCommands', 'contentReloadErrorStrategy' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #private } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadCommand.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadCommand.class.st index cc306bde..3fe7d188 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadCommand.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadCommand.class.st @@ -10,7 +10,7 @@ Class { #instVars : [ 'contentReloadErrorStrategy' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadDatabase.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadDatabase.class.st index ea659763..f063fae5 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadDatabase.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadDatabase.class.st @@ -15,7 +15,7 @@ Class { 'isPrimaryDB', 'isPlaygroundDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateAddDb.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateAddDb.class.st index 455e05a4..9a2db1e6 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateAddDb.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateAddDb.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingDb.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingDb.class.st index e18babe2..28d43274 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingDb.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingDb.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPlayground.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPlayground.class.st index 393d29c0..28e8bda6 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPlayground.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPlayground.class.st @@ -5,7 +5,7 @@ Class { 'playgroundDB', 'isAlsoPrimaryDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPrimary.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPrimary.class.st index 7960e43c..5fc8a69b 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPrimary.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateExistingPrimary.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'primaryDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePlayground.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePlayground.class.st index 62979130..ab8895f8 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePlayground.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePlayground.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'playgroundDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePrimary.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePrimary.class.st index fa1fb29d..180dc2a8 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePrimary.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdatePrimary.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'primaryDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateRemoveDb.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateRemoveDb.class.st index d3f538ab..61eb1d3e 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateRemoveDb.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateRemoveDb.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledDb.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledDb.class.st index 944911fc..1ef97280 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledDb.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledDb.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPlayground.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPlayground.class.st index bad1c474..4a898991 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPlayground.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPlayground.class.st @@ -5,7 +5,7 @@ Class { 'playgroundDB', 'isAlsoPrimaryDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPrimary.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPrimary.class.st index 233785e0..e88fb95a 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPrimary.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloadUpdateShuffledPrimary.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'primaryDB' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #updating } diff --git a/src/Lepiter-Store/LeLogicalDatabaseReloaded.class.st b/src/Lepiter-Store/LeLogicalDatabaseReloaded.class.st index 846b6817..e29ce3c6 100644 --- a/src/Lepiter-Store/LeLogicalDatabaseReloaded.class.st +++ b/src/Lepiter-Store/LeLogicalDatabaseReloaded.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'database' ], - #category : #'Lepiter-Store-Reload - Announcements' + #category : 'Lepiter-Store-Reload - Announcements' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeMockLocalJsonV3StorageWithFilesOrder.class.st b/src/Lepiter-Store/LeMockLocalJsonV3StorageWithFilesOrder.class.st index 62b61896..56fbdf12 100644 --- a/src/Lepiter-Store/LeMockLocalJsonV3StorageWithFilesOrder.class.st +++ b/src/Lepiter-Store/LeMockLocalJsonV3StorageWithFilesOrder.class.st @@ -1,7 +1,7 @@ Class { #name : #LeMockLocalJsonV3StorageWithFilesOrder, #superclass : #LeLocalJsonV3Storage, - #category : #'Lepiter-Store-Mocks' + #category : 'Lepiter-Store-Mocks' } { #category : #enumerating } diff --git a/src/Lepiter-Store/LeMockLocalJsonV4StorageWithFilesOrder.class.st b/src/Lepiter-Store/LeMockLocalJsonV4StorageWithFilesOrder.class.st index c1bb227e..58325572 100644 --- a/src/Lepiter-Store/LeMockLocalJsonV4StorageWithFilesOrder.class.st +++ b/src/Lepiter-Store/LeMockLocalJsonV4StorageWithFilesOrder.class.st @@ -1,5 +1,5 @@ Class { #name : #LeMockLocalJsonV4StorageWithFilesOrder, #superclass : #LeLocalJsonV4Storage, - #category : #'Lepiter-Store-Mocks' + #category : 'Lepiter-Store-Mocks' } diff --git a/src/Lepiter-Store/LePageComplexStructureChange.class.st b/src/Lepiter-Store/LePageComplexStructureChange.class.st index c7f68f12..abd26904 100644 --- a/src/Lepiter-Store/LePageComplexStructureChange.class.st +++ b/src/Lepiter-Store/LePageComplexStructureChange.class.st @@ -4,7 +4,7 @@ At the moment I indicate that there is a change in structure. Class { #name : #LePageComplexStructureChange, #superclass : #LePageStructureChange, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #testing } diff --git a/src/Lepiter-Store/LePageIsReloadNecessaryChecker.class.st b/src/Lepiter-Store/LePageIsReloadNecessaryChecker.class.st index 36721958..5958d136 100644 --- a/src/Lepiter-Store/LePageIsReloadNecessaryChecker.class.st +++ b/src/Lepiter-Store/LePageIsReloadNecessaryChecker.class.st @@ -5,7 +5,7 @@ Class { 'existingPage', 'loadedPage' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #checking } diff --git a/src/Lepiter-Store/LePageNoStructureChange.class.st b/src/Lepiter-Store/LePageNoStructureChange.class.st index 209d7dcf..d2a771e4 100644 --- a/src/Lepiter-Store/LePageNoStructureChange.class.st +++ b/src/Lepiter-Store/LePageNoStructureChange.class.st @@ -6,5 +6,5 @@ There could be changes in content for individual snippets, but the structure is Class { #name : #LePageNoStructureChange, #superclass : #LePageStructureChange, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } diff --git a/src/Lepiter-Store/LePageReloaderContext.class.st b/src/Lepiter-Store/LePageReloaderContext.class.st index e0dec97e..c6a7b7be 100644 --- a/src/Lepiter-Store/LePageReloaderContext.class.st +++ b/src/Lepiter-Store/LePageReloaderContext.class.st @@ -11,7 +11,7 @@ Class { 'targetSnippetsByUid', 'referenceSnippetsByUid' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LePageStructureAsseambler.class.st b/src/Lepiter-Store/LePageStructureAsseambler.class.st index 1076f65f..261e3ebb 100644 --- a/src/Lepiter-Store/LePageStructureAsseambler.class.st +++ b/src/Lepiter-Store/LePageStructureAsseambler.class.st @@ -11,7 +11,7 @@ Class { 'reloaderContext', 'snippetStructure' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #actions } @@ -250,6 +250,11 @@ LePageStructureAsseambler >> reloadContentForStructure: aStructureNode intoConte ^ existingSnippet ] +{ #category : #accessing } +LePageStructureAsseambler >> reloaderContext [ + ^ reloaderContext +] + { #category : #actions } LePageStructureAsseambler >> reloadUnknownSnippet: existingSnippet fromSnippet: replacementSnippet intoContent: aParentContent [ @@ -265,11 +270,6 @@ LePageStructureAsseambler >> reloadUnknownSnippet: existingSnippet fromSnippet: ^ replacementSnippet ] -{ #category : #accessing } -LePageStructureAsseambler >> reloaderContext [ - ^ reloaderContext -] - { #category : #accessing } LePageStructureAsseambler >> removedSnippetsCount [ "Here we count explicitly the number of removed snippets" diff --git a/src/Lepiter-Store/LePageStructureAsseamblerExamples.class.st b/src/Lepiter-Store/LePageStructureAsseamblerExamples.class.st index b81dd384..64abd6f8 100644 --- a/src/Lepiter-Store/LePageStructureAsseamblerExamples.class.st +++ b/src/Lepiter-Store/LePageStructureAsseamblerExamples.class.st @@ -1,7 +1,7 @@ Class { #name : #LePageStructureAsseamblerExamples, #superclass : #Object, - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #assertions } diff --git a/src/Lepiter-Store/LePageStructureAssemblersGroup.class.st b/src/Lepiter-Store/LePageStructureAssemblersGroup.class.st index 3ed8d344..85d192f1 100644 --- a/src/Lepiter-Store/LePageStructureAssemblersGroup.class.st +++ b/src/Lepiter-Store/LePageStructureAssemblersGroup.class.st @@ -3,7 +3,7 @@ Class { #superclass : #Object, #traits : 'TGtGroupWithItems', #classTraits : 'TGtGroupWithItems classTrait', - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #'gt - extensions' } diff --git a/src/Lepiter-Store/LePageStructureChange.class.st b/src/Lepiter-Store/LePageStructureChange.class.st index 280ce779..3e01c2c2 100644 --- a/src/Lepiter-Store/LePageStructureChange.class.st +++ b/src/Lepiter-Store/LePageStructureChange.class.st @@ -6,7 +6,7 @@ My subclasses indicate concrete types of changes. Class { #name : #LePageStructureChange, #superclass : #Object, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #testing } diff --git a/src/Lepiter-Store/LePageStructureChangeTypeDetector.class.st b/src/Lepiter-Store/LePageStructureChangeTypeDetector.class.st index 8204ece0..f16697cb 100644 --- a/src/Lepiter-Store/LePageStructureChangeTypeDetector.class.st +++ b/src/Lepiter-Store/LePageStructureChangeTypeDetector.class.st @@ -6,7 +6,7 @@ The change in structure is calculated based on snippet ids. Class { #name : #LePageStructureChangeTypeDetector, #superclass : #Object, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #api } diff --git a/src/Lepiter-Store/LePageStructureNode.class.st b/src/Lepiter-Store/LePageStructureNode.class.st index 9616ad46..eb5a250e 100644 --- a/src/Lepiter-Store/LePageStructureNode.class.st +++ b/src/Lepiter-Store/LePageStructureNode.class.st @@ -14,7 +14,7 @@ Class { 'typeName', 'changeStatuses' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LePropertiesExamples.class.st b/src/Lepiter-Store/LePropertiesExamples.class.st index 30816b72..a47cecb4 100644 --- a/src/Lepiter-Store/LePropertiesExamples.class.st +++ b/src/Lepiter-Store/LePropertiesExamples.class.st @@ -3,7 +3,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #private } diff --git a/src/Lepiter-Store/LeReloadOptimization.class.st b/src/Lepiter-Store/LeReloadOptimization.class.st index eb6fbe8a..163b303c 100644 --- a/src/Lepiter-Store/LeReloadOptimization.class.st +++ b/src/Lepiter-Store/LeReloadOptimization.class.st @@ -1,7 +1,7 @@ Class { #name : #LeReloadOptimization, #superclass : #DynamicVariable, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeReloadOutOfDateReasonSignal.class.st b/src/Lepiter-Store/LeReloadOutOfDateReasonSignal.class.st index 59e87b0e..716f89e0 100644 --- a/src/Lepiter-Store/LeReloadOutOfDateReasonSignal.class.st +++ b/src/Lepiter-Store/LeReloadOutOfDateReasonSignal.class.st @@ -1,5 +1,5 @@ Class { #name : #LeReloadOutOfDateReasonSignal, #superclass : #LeReloadReasonSignal, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } diff --git a/src/Lepiter-Store/LeReloadReason.class.st b/src/Lepiter-Store/LeReloadReason.class.st index aa2337a6..00f4c541 100644 --- a/src/Lepiter-Store/LeReloadReason.class.st +++ b/src/Lepiter-Store/LeReloadReason.class.st @@ -1,7 +1,7 @@ Class { #name : #LeReloadReason, #superclass : #Object, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #'gt - extensions' } diff --git a/src/Lepiter-Store/LeReloadReasonSignal.class.st b/src/Lepiter-Store/LeReloadReasonSignal.class.st index d4ad8c87..5ae99b7d 100644 --- a/src/Lepiter-Store/LeReloadReasonSignal.class.st +++ b/src/Lepiter-Store/LeReloadReasonSignal.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'reason' ], - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } { #category : #'gt - extensions' } diff --git a/src/Lepiter-Store/LeReloadUpToDateReasonSignal.class.st b/src/Lepiter-Store/LeReloadUpToDateReasonSignal.class.st index d68022ec..5554577b 100644 --- a/src/Lepiter-Store/LeReloadUpToDateReasonSignal.class.st +++ b/src/Lepiter-Store/LeReloadUpToDateReasonSignal.class.st @@ -1,5 +1,5 @@ Class { #name : #LeReloadUpToDateReasonSignal, #superclass : #LeReloadReasonSignal, - #category : #'Lepiter-Store-Reload - Optimizations' + #category : 'Lepiter-Store-Reload - Optimizations' } diff --git a/src/Lepiter-Store/LeShowDebuggerContentReloadErrorStrategy.class.st b/src/Lepiter-Store/LeShowDebuggerContentReloadErrorStrategy.class.st index b6947985..0abbdb82 100644 --- a/src/Lepiter-Store/LeShowDebuggerContentReloadErrorStrategy.class.st +++ b/src/Lepiter-Store/LeShowDebuggerContentReloadErrorStrategy.class.st @@ -4,7 +4,7 @@ Executes the given computation normally without any kind of wrapping. This raise Class { #name : #LeShowDebuggerContentReloadErrorStrategy, #superclass : #LeDatabaseContentReloadErrorStrategy, - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #action } diff --git a/src/Lepiter-Store/LeSingleNotificationContentReloadErrorStrategy.class.st b/src/Lepiter-Store/LeSingleNotificationContentReloadErrorStrategy.class.st index 04029bfe..d273dd0b 100644 --- a/src/Lepiter-Store/LeSingleNotificationContentReloadErrorStrategy.class.st +++ b/src/Lepiter-Store/LeSingleNotificationContentReloadErrorStrategy.class.st @@ -8,7 +8,7 @@ Class { 'contentErrors', 'currentDatabaseName' ], - #category : #'Lepiter-Store-Reload' + #category : 'Lepiter-Store-Reload' } { #category : #callbacks } diff --git a/src/Lepiter-Store/LeStoreAttachmentReader.class.st b/src/Lepiter-Store/LeStoreAttachmentReader.class.st index 9a915c8b..33a387b2 100644 --- a/src/Lepiter-Store/LeStoreAttachmentReader.class.st +++ b/src/Lepiter-Store/LeStoreAttachmentReader.class.st @@ -7,7 +7,7 @@ Class { 'attachmentName', 'isBinaryContent' ], - #category : #'Lepiter-Store-Attachments' + #category : 'Lepiter-Store-Attachments' } { #category : #'api - accessing' } diff --git a/src/Lepiter-Store/LeStoreAttachmentWriter.class.st b/src/Lepiter-Store/LeStoreAttachmentWriter.class.st index df0fadb2..a974c1f6 100644 --- a/src/Lepiter-Store/LeStoreAttachmentWriter.class.st +++ b/src/Lepiter-Store/LeStoreAttachmentWriter.class.st @@ -8,7 +8,7 @@ Class { 'attachmentName', 'writer' ], - #category : #'Lepiter-Store-Attachments' + #category : 'Lepiter-Store-Attachments' } { #category : #'api - accessing' } diff --git a/src/Lepiter-Store/LeStoreLocationExamples.class.st b/src/Lepiter-Store/LeStoreLocationExamples.class.st index 137b2c10..a2b5c2a5 100644 --- a/src/Lepiter-Store/LeStoreLocationExamples.class.st +++ b/src/Lepiter-Store/LeStoreLocationExamples.class.st @@ -3,7 +3,7 @@ Class { #superclass : #Object, #traits : 'TAssertable', #classTraits : 'TAssertable classTrait', - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #examples } diff --git a/src/Lepiter-Store/LeStoreMonitorAnnouncement.class.st b/src/Lepiter-Store/LeStoreMonitorAnnouncement.class.st index 9abccc19..c8b2a6ba 100644 --- a/src/Lepiter-Store/LeStoreMonitorAnnouncement.class.st +++ b/src/Lepiter-Store/LeStoreMonitorAnnouncement.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'monitor' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeStoreMonitorEntryQueued.class.st b/src/Lepiter-Store/LeStoreMonitorEntryQueued.class.st index b51703ba..001b90e6 100644 --- a/src/Lepiter-Store/LeStoreMonitorEntryQueued.class.st +++ b/src/Lepiter-Store/LeStoreMonitorEntryQueued.class.st @@ -1,5 +1,5 @@ Class { #name : #LeStoreMonitorEntryQueued, #superclass : #LeStoreMonitorAnnouncement, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } diff --git a/src/Lepiter-Store/LeStoreMonitorSaved.class.st b/src/Lepiter-Store/LeStoreMonitorSaved.class.st index 532d57ce..fa460856 100644 --- a/src/Lepiter-Store/LeStoreMonitorSaved.class.st +++ b/src/Lepiter-Store/LeStoreMonitorSaved.class.st @@ -5,5 +5,5 @@ LeLocalStoreMonitorSaved is announced each time the monitor has completed a cycl Class { #name : #LeStoreMonitorSaved, #superclass : #LeStoreMonitorAnnouncement, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } diff --git a/src/Lepiter-Store/LeStoreMonitorSavedChanges.class.st b/src/Lepiter-Store/LeStoreMonitorSavedChanges.class.st index 3990e233..b9e77f47 100644 --- a/src/Lepiter-Store/LeStoreMonitorSavedChanges.class.st +++ b/src/Lepiter-Store/LeStoreMonitorSavedChanges.class.st @@ -1,5 +1,5 @@ Class { #name : #LeStoreMonitorSavedChanges, #superclass : #LeStoreMonitorSaved, - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } diff --git a/src/Lepiter-Store/LeSubSettings.class.st b/src/Lepiter-Store/LeSubSettings.class.st index e333c2ce..fa977dda 100644 --- a/src/Lepiter-Store/LeSubSettings.class.st +++ b/src/Lepiter-Store/LeSubSettings.class.st @@ -9,7 +9,7 @@ Class { #instVars : [ 'dbProperties' ], - #category : #'Lepiter-Store-Settings' + #category : 'Lepiter-Store-Settings' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeUnknownObjectForTesting.class.st b/src/Lepiter-Store/LeUnknownObjectForTesting.class.st index ca8e47dd..66baf353 100644 --- a/src/Lepiter-Store/LeUnknownObjectForTesting.class.st +++ b/src/Lepiter-Store/LeUnknownObjectForTesting.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'unknownParsedObject' ], - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #serialization } diff --git a/src/Lepiter-Store/LeUnknownObjectForTestingResolver.class.st b/src/Lepiter-Store/LeUnknownObjectForTestingResolver.class.st index 3a8ae80e..47cf728c 100644 --- a/src/Lepiter-Store/LeUnknownObjectForTestingResolver.class.st +++ b/src/Lepiter-Store/LeUnknownObjectForTestingResolver.class.st @@ -1,7 +1,7 @@ Class { #name : #LeUnknownObjectForTestingResolver, #superclass : #LeUnknownObjectResolver, - #category : #'Lepiter-Store-Examples' + #category : 'Lepiter-Store-Examples' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeUnknownObjectResolver.class.st b/src/Lepiter-Store/LeUnknownObjectResolver.class.st index ca801a23..ddea3d30 100644 --- a/src/Lepiter-Store/LeUnknownObjectResolver.class.st +++ b/src/Lepiter-Store/LeUnknownObjectResolver.class.st @@ -1,7 +1,7 @@ Class { #name : #LeUnknownObjectResolver, #superclass : #Object, - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeUnknownPageTypeResolver.class.st b/src/Lepiter-Store/LeUnknownPageTypeResolver.class.st index 446645c8..6a65787c 100644 --- a/src/Lepiter-Store/LeUnknownPageTypeResolver.class.st +++ b/src/Lepiter-Store/LeUnknownPageTypeResolver.class.st @@ -1,7 +1,7 @@ Class { #name : #LeUnknownPageTypeResolver, #superclass : #LeUnknownObjectResolver, - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #accessing } diff --git a/src/Lepiter-Store/LeUnknownParsedObject.class.st b/src/Lepiter-Store/LeUnknownParsedObject.class.st index 302beeda..3b9c8d8d 100644 --- a/src/Lepiter-Store/LeUnknownParsedObject.class.st +++ b/src/Lepiter-Store/LeUnknownParsedObject.class.st @@ -4,7 +4,7 @@ Class { #instVars : [ 'map' ], - #category : #'Lepiter-Store-JsonV4' + #category : 'Lepiter-Store-JsonV4' } { #category : #'instance creation' } diff --git a/src/Lepiter-Store/LeVolatileMonitor.class.st b/src/Lepiter-Store/LeVolatileMonitor.class.st index a2f9d56c..0e08db23 100644 --- a/src/Lepiter-Store/LeVolatileMonitor.class.st +++ b/src/Lepiter-Store/LeVolatileMonitor.class.st @@ -10,7 +10,7 @@ Class { 'tableOfContentsPageID', 'dbProperties' ], - #category : #'Lepiter-Store-LocalJSON-Store' + #category : 'Lepiter-Store-LocalJSON-Store' } { #category : #accessing } diff --git a/src/Lepiter-Store/NeoJSONMapper.extension.st b/src/Lepiter-Store/NeoJSONMapper.extension.st new file mode 100644 index 00000000..28247633 --- /dev/null +++ b/src/Lepiter-Store/NeoJSONMapper.extension.st @@ -0,0 +1,9 @@ +Extension { #name : #NeoJSONMapper } + +{ #category : #'*Lepiter-Store' } +NeoJSONMapper >> for: smalltalkClass named: aSymbol do: block [ + "Execute the code in block to further customize the mapping for schemaName. + Create and add a new standard object mapping for schemaName if necessary." + + ^ self for: smalltalkClass do: block +] diff --git a/src/Lepiter-Store/Object.extension.st b/src/Lepiter-Store/Object.extension.st index 7d591a45..45bab621 100644 --- a/src/Lepiter-Store/Object.extension.st +++ b/src/Lepiter-Store/Object.extension.st @@ -56,3 +56,18 @@ Object class >> leJsonV4MappingFor: aNeoJSONMapper [ self leJsonV4AddMappingsTo: mapping ]. ] + +{ #category : #'*Lepiter-Store' } +Object class >> leJsonV4MappingFor: aNeoJSONMapper named: aSymbol [ + "By default, Lepiter objects are written as a mapping. + Any subclasses that want a different representation should over-write this method. + This mapping is used for classes listed in LeJsonV4>>explicitClassNamesToMap" + + aNeoJSONMapper for: self named: aSymbol do: [ :mapping | + mapping + mapProperty: #'__type' + getter: [ :object | aSymbol ] + setter: [ :um | self error: 'Objects should not be read here' ]. + self leJsonV4AddMappingsTo: mapping ]. + +] diff --git a/src/Lepiter-Store/Point.extension.st b/src/Lepiter-Store/Point.extension.st index 084c8d9c..6ba1db14 100644 --- a/src/Lepiter-Store/Point.extension.st +++ b/src/Lepiter-Store/Point.extension.st @@ -1,5 +1,11 @@ Extension { #name : #Point } +{ #category : #'*Lepiter-Store' } +Point class >> deSerializeAllImplementorsInstances [ + + ^ { 1@2 } +] + { #category : #'*Lepiter-Store' } Point class >> leFromJsonV4Dictionary: aDictionary [ "Create a new instance of the receiver from the supplied dictionary." diff --git a/src/Lepiter-Store/ScaledDecimal.extension.st b/src/Lepiter-Store/ScaledDecimal.extension.st index 0ed8448e..4e49a0c9 100644 --- a/src/Lepiter-Store/ScaledDecimal.extension.st +++ b/src/Lepiter-Store/ScaledDecimal.extension.st @@ -1,5 +1,11 @@ Extension { #name : #ScaledDecimal } +{ #category : #'*Lepiter-Store' } +ScaledDecimal class >> deSerializeAllImplementorsInstances [ + + ^ { 4.5s3 } +] + { #category : #'*Lepiter-Store' } ScaledDecimal class >> leFromJsonV4Dictionary: aDictionary [ "Create a new instance of the receiver from the supplied dictionary.