--- a/core/MetacelloProject.st Tue Sep 18 13:11:39 2012 +0000
+++ b/core/MetacelloProject.st Tue Sep 18 18:24:44 2012 +0000
@@ -1,8 +1,8 @@
"{ Package: 'stx:goodies/metacello/core' }"
Object subclass:#MetacelloProject
- instanceVariableNames:'versionMap symbolicVersionMap loader loaderClass loadType
- configuration projectAttributes'
+ instanceVariableNames:'versionMap symbolicVersionMap errorMap loader loaderClass
+ loadType configuration projectAttributes versionNumberClass'
classVariableNames:''
poolDictionaries:''
category:'Metacello-Core-Model'
@@ -23,6 +23,12 @@
^self basicNew configuration: aConfig; yourself
! !
+!MetacelloProject class methodsFor:'accessing'!
+
+versionConstructorClass
+ ^ MetacelloVersionConstructor
+! !
+
!MetacelloProject methodsFor:'accessing'!
configuration
@@ -38,6 +44,15 @@
^#release
!
+errorMap
+ ^ errorMap
+!
+
+errorMap: anObject
+ errorMap ifNil: [ errorMap := Dictionary new ].
+ errorMap := anObject
+!
+
label
^self configuration class name
@@ -130,6 +145,17 @@
^#(development broken baseline)
!
+lookupVersion: aVersionString ifAbsent: aBlock
+ "please use version:...this is a private method"
+
+ ^ self map
+ at: aVersionString
+ ifAbsent: [
+ (MetacelloVersionDefinitionError project: self project versionString: aVersionString)
+ exception: (self errorMap at: aVersionString ifAbsent: [ ^ aBlock value ]);
+ signal ]
+!
+
platformAttributes
^self projectPlatformAttributes
@@ -165,8 +191,38 @@
^(self map values asArray sort: [:a :b | a >= b ]) select: [:vrsn | (#(broken baseline) includes: vrsn blessing) not ].
! !
+!MetacelloProject methodsFor:'scripting'!
+
+projectForScriptEngine: aMetacelloScriptEngine
+ ^ self projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: false
+!
+
+projectForScriptEngine: aMetacelloScriptEngine unconditionalLoad: aBool
+ ^ self subclassResponsibility
+! !
+
!MetacelloProject methodsFor:'spec classes'!
+baselineOfProjectSpec
+ ^ self baselineOfProjectSpecClass for: self
+!
+
+baselineOfProjectSpecClass
+ ^ self subclassResponsibility
+!
+
+baselineOfVersionSpecClass
+ ^ self subclassResponsibility
+!
+
+configurationOfProjectSpec
+ ^ self configurationOfProjectSpecClass for: self
+!
+
+configurationOfProjectSpecClass
+ ^ self subclassResponsibility
+!
+
defaultLoaderClass
^MetacelloSpecLoader
@@ -229,8 +285,7 @@
!
projectSpecClass
-
- ^self subclassResponsibility
+ ^ MetacelloProjectSpec
!
valueHolderSpec
@@ -401,21 +456,21 @@
!
version: aVersionString
- | vrsn |
- aVersionString isSymbol
- ifTrue: [
- | symbolicVersionString |
- symbolicVersionString := self symbolicVersionMap
- at: aVersionString
- ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
- symbolicVersionString == #notDefined
- ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
- ^ self map
- at: symbolicVersionString
- ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
- ^ self map
- at: aVersionString
- ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
+ | vrsn |
+ aVersionString isSymbol
+ ifTrue: [
+ | symbolicVersionString |
+ symbolicVersionString := self symbolicVersionMap
+ at: aVersionString
+ ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: aVersionString) signal ].
+ symbolicVersionString == #'notDefined'
+ ifTrue: [ (MetacelloSymbolicVersionNotDefinedError project: self project versionString: aVersionString) signal ].
+ ^ self
+ lookupVersion: symbolicVersionString
+ ifAbsent: [ (MetacelloSymbolicVersionDoesNotExistError project: self project versionString: symbolicVersionString) signal ] ].
+ ^ self
+ lookupVersion: aVersionString
+ ifAbsent: [ (MetacelloVersionDoesNotExistError project: self project versionString: aVersionString) signal ]
!
version: aVersionString ifAbsent: aBlock
@@ -423,6 +478,15 @@
^[ self version: aVersionString ] on: MetacelloVersionDoesNotExistError do: [:ex | aBlock value ].
!
+versionNumberClass
+ versionNumberClass ifNil: [ versionNumberClass := MetacelloVersionNumber ].
+ ^ versionNumberClass
+!
+
+versionNumberClass: aClass
+ versionNumberClass := aClass
+!
+
versions
^self map values asArray sort: [:a :b | a <= b ]