X Tutup
" I model version numbers. I am comparable and I define a natural order. " Class { #name : #GRVersion, #superclass : #GRObject, #instVars : [ 'major', 'minor', 'revision', 'stageLabel', 'stageNumber' ], #category : #'Grease-Core' } { #category : #'instance creation' } GRVersion class >> major: majorInteger [ ^ self major: majorInteger minor: nil ] { #category : #'instance creation' } GRVersion class >> major: majorInteger minor: minorInteger [ ^ self major: majorInteger minor: minorInteger revision: nil ] { #category : #'instance creation' } GRVersion class >> major: majorInteger minor: minorInteger revision: revisionInteger [ ^ self basicNew initializeWithMajor: majorInteger minor: minorInteger revision: revisionInteger; yourself ] { #category : #'instance creation' } GRVersion class >> new [ ^ self major: 1 ] { #category : #comparing } GRVersion >> < otherVersion [ (major < otherVersion major) ifTrue: [ ^ true ]. (otherVersion major < major) ifTrue: [ ^ false ]. ((minor ifNil: [ 0 ]) < (otherVersion minor ifNil: [ 0 ])) ifTrue: [ ^ true ]. ((otherVersion minor ifNil: [ 0 ]) < (minor ifNil: [ 0 ])) ifTrue: [ ^ false ]. ((revision ifNil: [ 0 ]) < (otherVersion revision ifNil: [ 0 ])) ifTrue: [ ^ true ]. ((otherVersion revision ifNil: [ 0 ]) < (revision ifNil: [ 0 ])) ifTrue: [ ^ false ]. (stageLabel = otherVersion stage) ifTrue: [ ^ ((stageNumber ifNil: [ 1 ]) < (otherVersion stageNumber ifNil: [ 1 ])) ]. stageLabel isNil ifTrue: [ ^ false ]. otherVersion stage isNil ifTrue: [ ^ true ]. ^ stageLabel < otherVersion stage ] { #category : #comparing } GRVersion >> <= otherVersion [ ^ (self > otherVersion) not ] { #category : #comparing } GRVersion >> = otherVersion [ ^ (major = otherVersion major) and: [ ((minor ifNil: [ 0 ]) = (otherVersion minor ifNil: [ 0 ])) and: [ ((revision ifNil: [ 0 ] ) = (otherVersion revision ifNil: [ 0 ])) and: [ (stageLabel = otherVersion stage) and: [ (stageNumber ifNil: [ 1 ]) = (otherVersion stageNumber ifNil: [ 1 ]) ] ] ] ] ] { #category : #comparing } GRVersion >> > otherVersion [ ^ otherVersion < self ] { #category : #comparing } GRVersion >> >= otherVersion [ ^ (self < otherVersion) not ] { #category : #convenience } GRVersion >> beAlpha [ self beAlpha: nil ] { #category : #convenience } GRVersion >> beAlpha: anInteger [ self stage: #alpha number: anInteger ] { #category : #convenience } GRVersion >> beBeta [ self beBeta: nil ] { #category : #convenience } GRVersion >> beBeta: anInteger [ self stage: #beta number: anInteger ] { #category : #convenience } GRVersion >> beFinal [ self stage: nil number: nil ] { #category : #convenience } GRVersion >> beReleaseCandidate [ self beReleaseCandidate: nil ] { #category : #convenience } GRVersion >> beReleaseCandidate: anInteger [ self stage: #rc number: anInteger ] { #category : #converting } GRVersion >> greaseString [ ^ String streamContents: [ :stream | stream nextPutAll: major greaseString. stream nextPut: $.. stream nextPutAll: (minor ifNil: [ 0 ]) greaseString. revision isNil ifFalse: [ stream nextPut: $.. stream nextPutAll: revision greaseString ]. stageLabel isNil ifFalse: [ stream nextPutAll: stageLabel greaseString. stageNumber isNil ifFalse: [ stream nextPutAll: stageNumber greaseString ] ] ] ] { #category : #comparing } GRVersion >> hash [ ^ (major hash bitXor: (minor ifNil: [ 0 ]) hash) bitXor: (revision ifNil: [ 0 ]) hash ] { #category : #initialization } GRVersion >> initializeWithMajor: majorInteger minor: minorInteger revision: revisionInteger [ self initialize. major := majorInteger. minor := minorInteger. revision := revisionInteger ] { #category : #testing } GRVersion >> isAlpha [ ^ stageLabel = #alpha ] { #category : #testing } GRVersion >> isBeta [ ^ stageLabel = #beta ] { #category : #testing } GRVersion >> isFinal [ ^ stageLabel isNil ] { #category : #testing } GRVersion >> isReleaseCandidate [ ^ stageLabel = #rc ] { #category : #accessing } GRVersion >> major [ ^ major ] { #category : #accessing } GRVersion >> major: anInteger [ major := anInteger ] { #category : #accessing } GRVersion >> minor [ ^ minor ] { #category : #accessing } GRVersion >> minor: anInteger [ minor := anInteger ] { #category : #accessing } GRVersion >> revision [ ^ revision ] { #category : #accessing } GRVersion >> revision: anInteger [ revision := anInteger ] { #category : #accessing } GRVersion >> stage [ ^ stageLabel ] { #category : #accessing } GRVersion >> stage: aSymbol number: anInteger [ stageLabel := aSymbol. stageNumber := anInteger ] { #category : #accessing } GRVersion >> stageNumber [ ^ stageNumber ]
X Tutup