SystemOrganization addCategory: #'Flair-Core'! SystemOrganization addCategory: #'Flair-Tests'! Object subclass: #FLPackage instanceVariableNames: 'version description maintainer scripts relations' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLPackage class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 20:42'! new ^ self basicNew initialize! ! !FLPackage methodsFor: 'initialization' stamp: 'lr 4/15/2009 22:07'! initialize scripts := OrderedCollection new. relations := OrderedCollection new! ! !FLPackage methodsFor: 'accessing' stamp: 'lr 4/15/2009 20:36'! version ^ version! ! !FLPackage methodsFor: 'accessing' stamp: 'lr 4/15/2009 20:36'! version: aVersion version := aVersion! ! Object subclass: #FLRegistry instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLRegistry class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 22:08'! new ^ self basicNew initialize! ! !FLRegistry methodsFor: 'initialization' stamp: 'lr 4/15/2009 22:08'! initialize scripts := OrderedCollection new. relations := OrderedCollection new! ! Object subclass: #FLRelation instanceVariableNames: 'requirements' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! FLRelation subclass: #FLDependsRelation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLDependsRelation commentStamp: 'lr 4/15/2009 20:27' prior: 0! Package A depends on Package B if B absolutely must be installed in order to run A.! FLRelation subclass: #FLProvidesRelation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLProvidesRelation commentStamp: 'lr 4/15/2009 20:29' prior: 0! Package A provides Package B when all of the files and functionality of B are incorporated into A.! FLRelation subclass: #FLRecommendsRelation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLRecommendsRelation commentStamp: 'lr 4/15/2009 20:27' prior: 0! Package A recommends Package B, if the package maintainer judges that most users would not want A without also having the functionality provided by B.! !FLRelation class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 20:43'! new ^ self basicNew initialize! ! !FLRelation methodsFor: 'initialization' stamp: 'lr 4/15/2009 22:09'! initialize requirements := OrderedCollection new! ! FLRelation subclass: #FLReplacesRelation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLReplacesRelation commentStamp: 'lr 4/15/2009 20:28' prior: 0! Package A replaces Package B when files installed by B are removed over-written by files in A.! FLRelation subclass: #FLSuggestsRelation instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLSuggestsRelation commentStamp: 'lr 4/15/2009 20:28' prior: 0! Package A suggests Package B if B contains files that are related to (and usually enhance) the functionality of A.! Object subclass: #FLScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! FLScript subclass: #FLPostInstallScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! FLScript subclass: #FLPostRemoveScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! FLScript subclass: #FLPreInstallScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! FLScript subclass: #FLPreRemoveScript instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLScript class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 20:43'! new ^ self basicNew initialize! ! !FLScript methodsFor: 'initialization' stamp: 'lr 4/15/2009 20:43'! initialize ! ! Object subclass: #FLVersion instanceVariableNames: 'name' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLVersion class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 21:49'! new ^ self basicNew initialize! ! !FLVersion methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:56'! name ^ name! ! !FLVersion methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:56'! name: aString name := aString! ! !FLVersion methodsFor: 'printing' stamp: 'lr 4/15/2009 21:57'! printOn: aStream aStream nextPutAll: self name! ! FLVersion subclass: #FLVersionRequirement instanceVariableNames: 'operator number' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLVersionRequirement methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:57'! number ^ number! ! !FLVersionRequirement methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:58'! number: aVersionNumber number := aVersionNumber! ! !FLVersionRequirement methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:55'! operator ^ operator! ! !FLVersionRequirement methodsFor: 'accessing' stamp: 'lr 4/15/2009 21:56'! operator: aSymbol operator := aSymbol! ! !FLVersionRequirement methodsFor: 'printing' stamp: 'lr 4/15/2009 21:59'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' ('. self operator = #= ifFalse: [ aStream nextPutAll: self operator; nextPut: Character space ]. aStream print: self number. aStream nextPut: $)! ! Magnitude variableSubclass: #FLVersionNumber instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'Flair-Core'! !FLVersionNumber class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 21:26'! new ^ self error: 'Use ' , self class name , '>>#on: to instantiate the receiver'! ! !FLVersionNumber class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 21:25'! new: anInteger ^ self new! ! !FLVersionNumber class methodsFor: 'instance creation' stamp: 'lr 4/15/2009 21:24'! on: anArray | result | result := self basicNew: anArray size. 1 to: anArray size do: [ :index | result at: index put: (anArray at: index) ]. ^ result! ! !FLVersionNumber methodsFor: 'comparing' stamp: 'lr 4/15/2009 21:31'! < aVersionNumber 1 to: (self size min: aVersionNumber size) do: [ :index | (self at: index) = (aVersionNumber at: index) ifFalse: [ ^ (self at: index) < (aVersionNumber at: index) ] ]. ^ self size < aVersionNumber size! ! !FLVersionNumber methodsFor: 'comparing' stamp: 'lr 4/15/2009 21:31'! = aVersionNumber (self class = aVersionNumber class and: [ self size = aVersionNumber size ]) ifFalse: [ ^ false ]. 1 to: self size do: [ :index | (self at: index) = (aVersionNumber at: index) ifFalse: [ ^ false ] ]. ^ true! ! !FLVersionNumber methodsFor: 'comparing' stamp: 'lr 4/15/2009 21:37'! hash | hash | hash := self species hash. 1 to: self size do: [ :index | hash := ((hash bitShift: 6) bitXor: ((self at: index))) bitAnd: 16r0FFFFFFF ]. ^ hash! ! !FLVersionNumber methodsFor: 'printing' stamp: 'lr 4/15/2009 21:39'! printOn: aStream 1 to: self size do: [ :index | index = 1 ifFalse: [ aStream nextPut: $. ]. aStream print: (self at: index) ]! ! TestCase subclass: #FLVersionNumberTest instanceVariableNames: 'versions' classVariableNames: '' poolDictionaries: '' category: 'Flair-Tests'! !FLVersionNumberTest methodsFor: 'setup' stamp: 'lr 4/15/2009 22:30'! setUp super setUp. versions := OrderedCollection new. versions add: (FLVersionNumber on: #()). versions add: (FLVersionNumber on: #(1)). versions add: (FLVersionNumber on: #(1 1 2)). versions add: (FLVersionNumber on: #(1 1 3)). versions add: (FLVersionNumber on: #(1 2)). versions add: (FLVersionNumber on: #(1 2 0)). versions add: (FLVersionNumber on: #(1 3 1)). versions add: (FLVersionNumber on: #(3))! ! !FLVersionNumberTest methodsFor: 'testing' stamp: 'lr 4/15/2009 22:30'! testEqual self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 = i2 ifTrue: [ self assert: v1 = v2 ] ifFalse: [ self deny: v1 = v2 ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing-comparing' stamp: 'lr 4/15/2009 22:28'! testGreaterOrEqualThan self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 < i2 ifTrue: [ self deny: v1 >= v2 ]. i1 = i2 ifTrue: [ self assert: v1 >= v2 ]. i1 > i2 ifTrue: [ self assert: v1 >= v2 ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing-comparing' stamp: 'lr 4/15/2009 22:29'! testGreaterThan self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 < i2 ifTrue: [ self deny: v1 > v2 ]. i1 = i2 ifTrue: [ self deny: v1 > v2 ]. i1 > i2 ifTrue: [ self assert: v1 > v2 ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing' stamp: 'lr 4/15/2009 22:30'! testHash self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 = i2 ifTrue: [ self assert: v1 hash = v2 hash ] ifFalse: [ self deny: v1 hash = v2 hash ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing-comparing' stamp: 'lr 4/15/2009 22:29'! testLessOrEqualThan self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 < i2 ifTrue: [ self assert: v1 <= v2 ]. i1 = i2 ifTrue: [ self assert: v1 <= v2 ]. i1 > i2 ifTrue: [ self deny: v1 <= v2 ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing-comparing' stamp: 'lr 4/15/2009 22:29'! testLessThan self versions keysAndValuesDo: [ :i1 :v1 | self versions keysAndValuesDo: [ :i2 :v2 | i1 < i2 ifTrue: [ self assert: v1 < v2 ]. i1 = i2 ifTrue: [ self deny: v1 < v2 ]. i1 > i2 ifTrue: [ self deny: v1 < v2 ] ] ]! ! !FLVersionNumberTest methodsFor: 'testing' stamp: 'lr 4/15/2009 22:32'! testPrint self versions keysAndValuesDo: [ :i :v | i = 1 ifTrue: [ self assert: v printString = '' ] ifFalse: [ self assert: (v printString occurrencesOf: $.) = (v size - 1) ] ]! ! !FLVersionNumberTest methodsFor: 'accessing' stamp: 'lr 4/15/2009 22:24'! versions ^ versions! !