diff --git a/source/Magritte-Pharo7-Model.package/.filetree b/source/Magritte-Pharo7-Model.package/.filetree new file mode 100644 index 00000000..57a67973 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/.filetree @@ -0,0 +1,5 @@ +{ + "separateMethodMetaAndSource" : false, + "noMethodMetaData" : true, + "useCypressPropertiesFile" : true +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPackage.extension/class/magrittePharoModel.st b/source/Magritte-Pharo7-Model.package/GRPackage.extension/class/magrittePharoModel.st new file mode 100644 index 00000000..23c08246 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPackage.extension/class/magrittePharoModel.st @@ -0,0 +1,7 @@ +*Magritte-Pharo7-Model +magrittePharoModel + ^ self new + name: 'Magritte-Pharo-Model'; + addDependency: 'Magritte-Model'; + url: #magritteUrl; + yourself \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPackage.extension/properties.json b/source/Magritte-Pharo7-Model.package/GRPackage.extension/properties.json new file mode 100644 index 00000000..ae522a7e --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPackage.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "GRPackage" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteAllSubInstancesOf.do..st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteAllSubInstancesOf.do..st new file mode 100644 index 00000000..80c2f7a0 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteAllSubInstancesOf.do..st @@ -0,0 +1,5 @@ +*Magritte-Pharo7-Model +magritteAllSubInstancesOf: aClass do: aBlock + "Evaluate the aBlock for all instances of aClass and all its subclasses." + + aClass allSubInstancesDo: aBlock \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteClassNamed..st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteClassNamed..st new file mode 100644 index 00000000..801e5923 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteClassNamed..st @@ -0,0 +1,5 @@ +*Magritte-Pharo7-Model +magritteClassNamed: aString + "Return the class named aString, nil if the class can't be found." + + ^ Smalltalk classNamed: aString \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteColorClass.st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteColorClass.st new file mode 100644 index 00000000..dd1e5911 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteColorClass.st @@ -0,0 +1,5 @@ +*Magritte-Pharo7-Model +magritteColorClass + "Return a Color class" + + ^ Color \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteEvaluatorClassFor..st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteEvaluatorClassFor..st new file mode 100644 index 00000000..57fa37a4 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteEvaluatorClassFor..st @@ -0,0 +1,6 @@ +*Magritte-Pharo7-Model +magritteEvaluatorClassFor: aClass + "Answer an evaluator class appropriate for evaluating expressions in the + context of this class." + + ^ aClass compilerClass \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampClass.st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampClass.st new file mode 100644 index 00000000..939f192e --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampClass.st @@ -0,0 +1,7 @@ +*Magritte-Pharo7-Model +magritteTimeStampClass + "Return the platform's TimeStamp class. It is currently assumed that all platforms + have one, though this may not be correct and could require moving timestamp stuff + to its own package in order to resolve." + + ^ DateAndTime \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampIfAbsent..st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampIfAbsent..st new file mode 100644 index 00000000..8101d2a7 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteTimeStampIfAbsent..st @@ -0,0 +1,6 @@ +*Magritte-Pharo7-Model +magritteTimeStampIfAbsent: absentBlock + "Return the TimeStamp class, or if the platform does not have a TimeStamp + return the result of evaluating absentBlock." + + ^ DateAndTime \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteUniqueObject.st b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteUniqueObject.st new file mode 100644 index 00000000..b50dbe42 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/instance/magritteUniqueObject.st @@ -0,0 +1,6 @@ +*Magritte-Pharo7-Model +magritteUniqueObject + "Answer a random object, such as a UUID, that is extremely likely to + be unique over space and time." + + ^ ByteArray withAll: UUID new \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/properties.json b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/properties.json new file mode 100644 index 00000000..43eb591f --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/GRPharoPlatform.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "GRPharoPlatform" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/README.md b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/README.md new file mode 100644 index 00000000..5d6ad739 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/README.md @@ -0,0 +1,3 @@ +I manage the file-data I represent on the file-system. From the programmer this looks the same as if the file would be in memory (==*MAMemoryFileModel*==), as it is transparently loaded and written out as necessary. + +I delegate my actual location on disk to MAFileDatabase (see class comment). \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath..st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath..st new file mode 100644 index 00000000..43593a4d --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath..st @@ -0,0 +1,4 @@ +accessing +baseDirectoryPath: aString + " deprecated, but still used by pier " + MAFileDatabase baseDirectory: aString \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath.st new file mode 100644 index 00000000..c90b5abd --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseDirectoryPath.st @@ -0,0 +1,4 @@ +accessing +baseDirectoryPath + " deprecated: use MAFileDatabase baseDirectoryPath instead " + ^MAFileDatabase baseDirectory fullName \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl..st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl..st new file mode 100644 index 00000000..ee2e0b13 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl..st @@ -0,0 +1,4 @@ +accessing +baseUrl: aString + " deprecated: use MAFileDatabase baseUrl instead " + ^ MAFileDatabase baseUrl: aString \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl.st new file mode 100644 index 00000000..444f51e0 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/class/baseUrl.st @@ -0,0 +1,4 @@ +accessing +baseUrl + " deprecated: use MAFileDatabase baseDirectoryPath instead " + ^ MAFileDatabase baseUrl \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/^equals.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/^equals.st new file mode 100644 index 00000000..e705341d --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/^equals.st @@ -0,0 +1,3 @@ +comparing += anObject + ^ super = anObject and: [ self directory = anObject directory ] \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/baseUrl.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/baseUrl.st new file mode 100644 index 00000000..f28766b7 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/baseUrl.st @@ -0,0 +1,3 @@ +configuration +baseUrl + ^ self database baseUrl \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents..st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents..st new file mode 100644 index 00000000..c10d9bd0 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents..st @@ -0,0 +1,7 @@ +accessing +contents: aByteArray + | stream | + stream := self writeStream. + [ stream nextPutAll: aByteArray asByteArray ] + ensure: [ stream close ]. + super contents: aByteArray \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents.st new file mode 100644 index 00000000..e7ba4b95 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/contents.st @@ -0,0 +1,9 @@ +accessing +contents + | stream | + ^ self file exists + ifFalse: [ ByteArray new ] + ifTrue: [ + stream := self readStream. + [ stream contents ] + ensure: [ stream close ] ] \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/database.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/database.st new file mode 100644 index 00000000..4c445ca9 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/database.st @@ -0,0 +1,4 @@ +private +database + + ^ MAFileDatabase new. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/directory.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/directory.st new file mode 100644 index 00000000..f567ac04 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/directory.st @@ -0,0 +1,4 @@ +accessing-dynamic +directory + + ^ directory ifNil: [ directory := self database uniqueLocation ]. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/file.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/file.st new file mode 100644 index 00000000..33c67824 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/file.st @@ -0,0 +1,3 @@ +accessing-dynamic +file + ^(self directory / self filename) asFileReference \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/finalize.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/finalize.st new file mode 100644 index 00000000..e4dedcc3 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/finalize.st @@ -0,0 +1,10 @@ +initialization +finalize + | dir | + dir := self directory. + dir exists + ifTrue: [ dir deleteAll ]. + [ (dir := dir parent) hasChildren ] + whileFalse: [ dir ensureDelete ]. + super finalize. + location := nil \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/hash.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/hash.st new file mode 100644 index 00000000..5c3492f4 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/hash.st @@ -0,0 +1,3 @@ +comparing +hash + ^ super hash bitXor: self directory hash \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/postCopy.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/postCopy.st new file mode 100644 index 00000000..5f47af2d --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/postCopy.st @@ -0,0 +1,7 @@ +copying +postCopy + | previous | + super postCopy. + previous := self contents. + location := nil. + self contents: previous \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/readStream.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/readStream.st new file mode 100644 index 00000000..1715abe1 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/readStream.st @@ -0,0 +1,3 @@ +accessing-dynamic +readStream + ^ self file binaryReadStream \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/writeStream.st b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/writeStream.st new file mode 100644 index 00000000..326e268f --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/instance/writeStream.st @@ -0,0 +1,3 @@ +accessing-dynamic +writeStream + ^ self file binaryWriteStream \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/properties.json b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/properties.json new file mode 100644 index 00000000..525974d2 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAExternalFileModel.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "MAFileModel", + "category" : "Magritte-Pharo7-Model", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ + "location", + "directory" + ], + "name" : "MAExternalFileModel", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/README.md b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/README.md new file mode 100644 index 00000000..92ca7dc6 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/README.md @@ -0,0 +1,14 @@ +I provide locations for external files. + +- The ==#baseDirectory== is the place where Magritte puts its file-database. Keep this value to nil to make it default to a subdirectory next to the Smalltalk image. +- The ==#baseUrl== is a nice optimization to allow Apache (or any other Web Server) to directly serve the files. ==#baseUrl== is an absolute URL-prefix that is used to generate the path to the file. If you have specified one the file data does not go trough the image anymore, but instead is directly served trough the properly configured Web Server. + +The files are currently stored using the following scheme: + +=/files/9d/bsy8kyp45g0q7blphknk48zujap2wd/earthmap1k.jpg +=1 2 3 4 + +1. is the #baseDirectory as specified in the settings. +2. Are 256 directories named '00' to 'ff' to avoid having thousands of files in the same directory. Unfortunately this leads to problems with the Squeak file primitives and some filesystems don't handle that well. This part is generated at random. +3. This is a secure ID, similar to the Seaside session key. It is generated at random and provides a security system that even works through Apache (you have to disable directory listings of course): if you don't know the filename you can not access the file. +4. This is the original filename. Subclasses might want to store other cached versions of the same file there, for example resized images, etc. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory..st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory..st new file mode 100644 index 00000000..45875c58 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory..st @@ -0,0 +1,5 @@ +accessing +baseDirectory: aStringOrDirectory + "Defines where the files are stored. If this value is set to nil, it defaults to a subdirectory of of the current image-location." + + baseDirectory := aStringOrDirectory asFileReference. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory.st new file mode 100644 index 00000000..f4cda653 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseDirectory.st @@ -0,0 +1,3 @@ +accessing +baseDirectory + ^ baseDirectory ifNil: [ FileLocator imageDirectory / 'files' ]. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl..st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl..st new file mode 100644 index 00000000..11aea90a --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl..st @@ -0,0 +1,8 @@ +accessing +baseUrl: aString + "Defines the base-URL where the files are served from, when using an external web server. This setting is left to nil by default, causing the files to be served trough the image." + + baseUrl := aString isNil ifFalse: [ + aString last = $/ + ifFalse: [ aString ] + ifTrue: [ aString copyUpToLast: $/ ] ] \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl.st new file mode 100644 index 00000000..b070f0a3 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/baseUrl.st @@ -0,0 +1,3 @@ +accessing +baseUrl + ^ baseUrl \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/garbageCollect.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/garbageCollect.st new file mode 100644 index 00000000..37a4592b --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/garbageCollect.st @@ -0,0 +1,14 @@ +public +garbageCollect + "Remove obsolete files from the file-system that are not referenced from the image anymore. This method has to be called manually and is not intended to be portable." + + | mark sweep | + mark := self allInstances + collect: [ :each | each directory ]. + sweep := Array with: self baseDirectory. + self locationDefinition do: [ :definition | + sweep := sweep gather: [ :directory | + directory hasChildren ifFalse: [ directory delete ]. + FileLocator imageDirectory directories select: [ :e | e basename size = definition first ] ] ]. + sweep do: [ :directory | + (mark includes: directory) ifFalse: [ directory recursiveDelete ] ] \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/locationDefinition.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/locationDefinition.st new file mode 100644 index 00000000..2b75c356 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/class/locationDefinition.st @@ -0,0 +1,3 @@ +public +locationDefinition + ^ #( ( 2 '63450af8d9c2e17b' ) ( 30 'iaojv41bw67e0tud5m9rgplqfy8x3cs2kznh' ) ) \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseDirectory.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseDirectory.st new file mode 100644 index 00000000..5f7aa3b7 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseDirectory.st @@ -0,0 +1,4 @@ +accessing +baseDirectory + + ^ self class baseDirectory. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseUrl.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseUrl.st new file mode 100644 index 00000000..173fdcf4 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/baseUrl.st @@ -0,0 +1,4 @@ +accessing +baseUrl + + ^ self class baseUrl. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomIdentifierName.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomIdentifierName.st new file mode 100644 index 00000000..ca83e994 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomIdentifierName.st @@ -0,0 +1,9 @@ +private +randomIdentifierName + + | digits idLength allowedCharacters | + digits := $0 to: $9. + allowedCharacters := digits, Character alphabet. + idLength := 30. + ^ String streamContents: [ :str | + idLength timesRepeat: [ str nextPut: allowedCharacters atRandom ] ]. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomPartitionFolderName.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomPartitionFolderName.st new file mode 100644 index 00000000..4c9f7e6f --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/randomPartitionFolderName.st @@ -0,0 +1,7 @@ +private +randomPartitionFolderName + "Returns a string between '00' to 'FF'" + + | twoCharacterHexString | + twoCharacterHexString := 16rFF atRandom printStringBase: 16 length: 2 padded: true. + ^ twoCharacterHexString asLowercase. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/uniqueLocation.st b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/uniqueLocation.st new file mode 100644 index 00000000..48b73925 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/instance/uniqueLocation.st @@ -0,0 +1,12 @@ +public +uniqueLocation + "Finds an unique path to be used and create the necessary sub directories." + + | partition id result | + [ + partition := self randomPartitionFolderName. + id := self randomIdentifierName. + result := self baseDirectory ensureCreateDirectory / partition / id. + ] doWhileTrue: [ result exists ]. + + ^ result ensureCreateDirectory. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/properties.json b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/properties.json new file mode 100644 index 00000000..1090645b --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileDatabase.class/properties.json @@ -0,0 +1,14 @@ +{ + "commentStamp" : "", + "super" : "Object", + "category" : "Magritte-Pharo7-Model", + "classinstvars" : [ + "baseDirectory", + "baseUrl" + ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "MAFileDatabase", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/README.md b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/README.md new file mode 100644 index 00000000..e69de29b diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/extensionFor..st b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/extensionFor..st new file mode 100644 index 00000000..99b74f89 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/extensionFor..st @@ -0,0 +1,4 @@ +paths +extensionFor: aString + + ^ aString asFileReference extension. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fileSizeFor..st b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fileSizeFor..st new file mode 100644 index 00000000..5b2e492f --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fileSizeFor..st @@ -0,0 +1,3 @@ +entries +fileSizeFor: filenameString + ^ filenameString asFileReference size \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fullNameFor..st b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fullNameFor..st new file mode 100644 index 00000000..99761471 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/fullNameFor..st @@ -0,0 +1,4 @@ +paths +fullNameFor: aString + + ^ aString asFileReference fullName. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/imageDirectory.st b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/imageDirectory.st new file mode 100644 index 00000000..528eaa0b --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/imageDirectory.st @@ -0,0 +1,4 @@ +locations +imageDirectory + + ^ FileLocator imageDirectory. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/mimeTypesForExtension..st b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/mimeTypesForExtension..st new file mode 100644 index 00000000..5efbdbb1 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/class/mimeTypesForExtension..st @@ -0,0 +1,6 @@ +mime types +mimeTypesForExtension: aString + + | types | + types := MIMEType forExtensionReturnMimeTypesOrNil: aString. + ^ types ifNotNil: [ types collect: [ :e | e asString ] ]. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MAFileSystem.class/properties.json b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/properties.json new file mode 100644 index 00000000..ca370a6d --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MAFileSystem.class/properties.json @@ -0,0 +1,11 @@ +{ + "commentStamp" : "", + "super" : "Object", + "category" : "Magritte-Pharo7-Model", + "classinstvars" : [ ], + "pools" : [ ], + "classvars" : [ ], + "instvars" : [ ], + "name" : "MAFileSystem", + "type" : "normal" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/instance/chooseFile.in..st b/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/instance/chooseFile.in..st new file mode 100644 index 00000000..324d80fe --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/instance/chooseFile.in..st @@ -0,0 +1,10 @@ +*Magritte-Pharo7-Model +chooseFile: windowTitle in: directoryString + + | chooser | + chooser := FileDialogWindow newWithTheme: UITheme current. + chooser + title: windowTitle; + selectDirectory: directoryString; + answerFileEntry. + ^ chooser openModal answer ifNotNil: [ :answer | answer asFileReference ]. \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/properties.json b/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/properties.json new file mode 100644 index 00000000..79ec7689 --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/MorphicUIManager.extension/properties.json @@ -0,0 +1,3 @@ +{ + "name" : "MorphicUIManager" +} \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/monticello.meta/categories.st b/source/Magritte-Pharo7-Model.package/monticello.meta/categories.st new file mode 100644 index 00000000..c7ee2ded --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/monticello.meta/categories.st @@ -0,0 +1 @@ +SystemOrganization addCategory: #'Magritte-Pharo7-Model'! diff --git a/source/Magritte-Pharo7-Model.package/monticello.meta/initializers.st b/source/Magritte-Pharo7-Model.package/monticello.meta/initializers.st new file mode 100644 index 00000000..e69de29b diff --git a/source/Magritte-Pharo7-Model.package/monticello.meta/package b/source/Magritte-Pharo7-Model.package/monticello.meta/package new file mode 100644 index 00000000..dd4ed13d --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/monticello.meta/package @@ -0,0 +1 @@ +(name 'Magritte-Pharo7-Model') \ No newline at end of file diff --git a/source/Magritte-Pharo7-Model.package/properties.json b/source/Magritte-Pharo7-Model.package/properties.json new file mode 100644 index 00000000..6f31cf5a --- /dev/null +++ b/source/Magritte-Pharo7-Model.package/properties.json @@ -0,0 +1 @@ +{ } \ No newline at end of file diff --git a/source/Magritte-Tests-Model.package/MAAccessorTest.class/instance/testStore.st b/source/Magritte-Tests-Model.package/MAAccessorTest.class/instance/testStore.st index be2adcaf..a43bddb6 100644 --- a/source/Magritte-Tests-Model.package/MAAccessorTest.class/instance/testStore.st +++ b/source/Magritte-Tests-Model.package/MAAccessorTest.class/instance/testStore.st @@ -1,5 +1,10 @@ tests-identity testStore | evaluator | - evaluator := GRPlatform current magritteEvaluatorClassFor: self actualClass. - self assert: (evaluator evaluate: self accessor storeString) = self accessor \ No newline at end of file + evaluator := GRPlatform current + magritteEvaluatorClassFor: self actualClass. + self + assert: + (evaluator new + source: self accessor storeString; + evaluate) = self accessor \ No newline at end of file