version: support post versions
This commit is contained in:
parent
15fca9661d
commit
34cf999f20
@ -170,6 +170,16 @@ describe Version do
|
|||||||
expect(described_class.create("1.2.3-p34")).to be > described_class.create("1.2.3")
|
expect(described_class.create("1.2.3-p34")).to be > described_class.create("1.2.3")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
specify "comparing post-level versions" do
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be > described_class.create("1.2.3.post33")
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be < described_class.create("1.2.3.post35")
|
||||||
|
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be > described_class.create("1.2.3rc35")
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be > described_class.create("1.2.3alpha35")
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be > described_class.create("1.2.3beta35")
|
||||||
|
expect(described_class.create("1.2.3.post34")).to be > described_class.create("1.2.3")
|
||||||
|
end
|
||||||
|
|
||||||
specify "comparing unevenly-padded versions" do
|
specify "comparing unevenly-padded versions" do
|
||||||
expect(described_class.create("2.1.0-p194")).to be < described_class.create("2.1-p195")
|
expect(described_class.create("2.1.0-p194")).to be < described_class.create("2.1-p195")
|
||||||
expect(described_class.create("2.1-p195")).to be > described_class.create("2.1.0-p194")
|
expect(described_class.create("2.1-p195")).to be > described_class.create("2.1.0-p194")
|
||||||
|
@ -25,6 +25,7 @@ class Version
|
|||||||
when /\A#{RCToken::PATTERN}\z/o then RCToken
|
when /\A#{RCToken::PATTERN}\z/o then RCToken
|
||||||
when /\A#{PreToken::PATTERN}\z/o then PreToken
|
when /\A#{PreToken::PATTERN}\z/o then PreToken
|
||||||
when /\A#{PatchToken::PATTERN}\z/o then PatchToken
|
when /\A#{PatchToken::PATTERN}\z/o then PatchToken
|
||||||
|
when /\A#{PostToken::PATTERN}\z/o then PostToken
|
||||||
when /\A#{NumericToken::PATTERN}\z/o then NumericToken
|
when /\A#{NumericToken::PATTERN}\z/o then NumericToken
|
||||||
when /\A#{StringToken::PATTERN}\z/o then StringToken
|
when /\A#{StringToken::PATTERN}\z/o then StringToken
|
||||||
end.new(val)
|
end.new(val)
|
||||||
@ -173,7 +174,7 @@ class Version
|
|||||||
case other
|
case other
|
||||||
when AlphaToken
|
when AlphaToken
|
||||||
rev <=> other.rev
|
rev <=> other.rev
|
||||||
when BetaToken, RCToken, PreToken, PatchToken
|
when BetaToken, RCToken, PreToken, PatchToken, PostToken
|
||||||
-1
|
-1
|
||||||
else
|
else
|
||||||
super
|
super
|
||||||
@ -193,7 +194,7 @@ class Version
|
|||||||
rev <=> other.rev
|
rev <=> other.rev
|
||||||
when AlphaToken
|
when AlphaToken
|
||||||
1
|
1
|
||||||
when PreToken, RCToken, PatchToken
|
when PreToken, RCToken, PatchToken, PostToken
|
||||||
-1
|
-1
|
||||||
else
|
else
|
||||||
super
|
super
|
||||||
@ -213,7 +214,7 @@ class Version
|
|||||||
rev <=> other.rev
|
rev <=> other.rev
|
||||||
when AlphaToken, BetaToken
|
when AlphaToken, BetaToken
|
||||||
1
|
1
|
||||||
when RCToken, PatchToken
|
when RCToken, PatchToken, PostToken
|
||||||
-1
|
-1
|
||||||
else
|
else
|
||||||
super
|
super
|
||||||
@ -233,7 +234,7 @@ class Version
|
|||||||
rev <=> other.rev
|
rev <=> other.rev
|
||||||
when AlphaToken, BetaToken, PreToken
|
when AlphaToken, BetaToken, PreToken
|
||||||
1
|
1
|
||||||
when PatchToken
|
when PatchToken, PostToken
|
||||||
-1
|
-1
|
||||||
else
|
else
|
||||||
super
|
super
|
||||||
@ -259,12 +260,31 @@ class Version
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# A token representing the part of a version designating it is a post release.
|
||||||
|
class PostToken < CompositeToken
|
||||||
|
PATTERN = /.post[0-9]+/i.freeze
|
||||||
|
|
||||||
|
def <=>(other)
|
||||||
|
return unless other = Token.from(other)
|
||||||
|
|
||||||
|
case other
|
||||||
|
when PostToken
|
||||||
|
rev <=> other.rev
|
||||||
|
when AlphaToken, BetaToken, RCToken, PreToken
|
||||||
|
1
|
||||||
|
else
|
||||||
|
super
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
SCAN_PATTERN = Regexp.union(
|
SCAN_PATTERN = Regexp.union(
|
||||||
AlphaToken::PATTERN,
|
AlphaToken::PATTERN,
|
||||||
BetaToken::PATTERN,
|
BetaToken::PATTERN,
|
||||||
PreToken::PATTERN,
|
PreToken::PATTERN,
|
||||||
RCToken::PATTERN,
|
RCToken::PATTERN,
|
||||||
PatchToken::PATTERN,
|
PatchToken::PATTERN,
|
||||||
|
PostToken::PATTERN,
|
||||||
NumericToken::PATTERN,
|
NumericToken::PATTERN,
|
||||||
StringToken::PATTERN,
|
StringToken::PATTERN,
|
||||||
).freeze
|
).freeze
|
||||||
@ -345,6 +365,10 @@ class Version
|
|||||||
m = /-((?:\d+\.)*\d+)$/.match(stem)
|
m = /-((?:\d+\.)*\d+)$/.match(stem)
|
||||||
return m.captures.first unless m.nil?
|
return m.captures.first unless m.nil?
|
||||||
|
|
||||||
|
# e.g. foobar-4.5.1.post1
|
||||||
|
m = /-((?:\d+\.)*\d+(.post\d+)?)$/.match(stem)
|
||||||
|
return m.captures.first unless m.nil?
|
||||||
|
|
||||||
# e.g. foobar-4.5.1b
|
# e.g. foobar-4.5.1b
|
||||||
m = /-((?:\d+\.)*\d+(?:[abc]|rc|RC)\d*)$/.match(stem)
|
m = /-((?:\d+\.)*\d+(?:[abc]|rc|RC)\d*)$/.match(stem)
|
||||||
return m.captures.first unless m.nil?
|
return m.captures.first unless m.nil?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user