smalltalk
/
osmo-st-all
Archived
1
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
osmo-st-all/grease/Core/GRVersion.st

191 lines
4.0 KiB
Smalltalk

GRObject subclass: GRVersion [
| major minor revision stageLabel stageNumber |
<comment: nil>
<category: 'Grease-Core'>
GRVersion class >> major: majorInteger [
<category: 'instance creation'>
^self major: majorInteger minor: nil
]
GRVersion class >> major: majorInteger minor: minorInteger [
<category: 'instance creation'>
^self
major: majorInteger
minor: minorInteger
revision: nil
]
GRVersion class >> major: majorInteger minor: minorInteger revision: revisionInteger [
<category: 'instance creation'>
^(self basicNew)
initializeWithMajor: majorInteger
minor: minorInteger
revision: revisionInteger;
yourself
]
GRVersion class >> new [
<category: 'instance creation'>
^self major: 1
]
initializeWithMajor: majorInteger minor: minorInteger revision: revisionInteger [
<category: 'initialization'>
self initialize.
major := majorInteger.
minor := minorInteger.
revision := revisionInteger
]
< otherVersion [
<category: 'comparing'>
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
]
<= otherVersion [
<category: 'comparing'>
^(self > otherVersion) not
]
= otherVersion [
<category: 'comparing'>
^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])]]]]
]
> otherVersion [
<category: 'comparing'>
^otherVersion < self
]
>= otherVersion [
<category: 'comparing'>
^(self < otherVersion) not
]
hash [
<category: 'comparing'>
^(major hash bitXor: minor hash) bitXor: revision hash
]
beAlpha [
<category: 'convenience'>
self beAlpha: nil
]
beAlpha: anInteger [
<category: 'convenience'>
self stage: #alpha number: anInteger
]
beBeta [
<category: 'convenience'>
self beBeta: nil
]
beBeta: anInteger [
<category: 'convenience'>
self stage: #beta number: anInteger
]
beFinal [
<category: 'convenience'>
self stage: nil number: nil
]
greaseString [
<category: 'converting'>
^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]]]
]
isAlpha [
<category: 'testing'>
^stageLabel = #alpha
]
isBeta [
<category: 'testing'>
^stageLabel = #beta
]
isFinal [
<category: 'testing'>
^stageLabel isNil
]
major [
<category: 'accessing'>
^major
]
major: anInteger [
<category: 'accessing'>
major := anInteger
]
minor [
<category: 'accessing'>
^minor
]
minor: anInteger [
<category: 'accessing'>
minor := anInteger
]
revision [
<category: 'accessing'>
^revision
]
revision: anInteger [
<category: 'accessing'>
revision := anInteger
]
stage [
<category: 'accessing'>
^stageLabel
]
stage: aSymbol number: anInteger [
<category: 'accessing'>
stageLabel := aSymbol.
stageNumber := anInteger
]
stageNumber [
<category: 'accessing'>
^stageNumber
]
]