mirror of
https://github.com/kikito/semver.lua.git
synced 2024-10-10 04:24:18 +00:00
started working on the prerelease
This commit is contained in:
parent
d07756e5af
commit
68de15f71d
29
semver.lua
29
semver.lua
@ -12,6 +12,16 @@ local function checkPositiveInteger(number, name)
|
||||
assert(math.floor(number) == number, name .. ' must be an integer')
|
||||
end
|
||||
|
||||
local function present(value)
|
||||
return value and value ~= ''
|
||||
end
|
||||
|
||||
local function filterPrerelease(prerelease)
|
||||
local identifiers = prerelease:match("-([%w-][%.%w-]+)")
|
||||
assert(identifiers, ("The prerelease %q must start with a dash and be followed by dashes, alphanumerics or dots."):format(prerelease))
|
||||
return identifiers
|
||||
end
|
||||
|
||||
local methods = {}
|
||||
|
||||
function methods:nextMajor()
|
||||
@ -28,7 +38,8 @@ local mt = { __index = methods }
|
||||
function mt:__eq(other)
|
||||
return self.major == other.major and
|
||||
self.minor == other.minor and
|
||||
self.patch == other.patch
|
||||
self.patch == other.patch and
|
||||
self.prerelease == other.prerelease
|
||||
end
|
||||
function mt:__lt(other)
|
||||
return self.major < other.major or
|
||||
@ -40,18 +51,23 @@ function mt:__pow(other)
|
||||
self.minor <= other.minor
|
||||
end
|
||||
function mt:__tostring()
|
||||
return ("%d.%d.%d"):format(self.major, self.minor, self.patch)
|
||||
local buffer = { ("%d.%d.%d"):format(self.major, self.minor, self.patch) }
|
||||
if self.prerelease then table.insert(buffer, "-" .. self.prerelease) end
|
||||
return table.concat(buffer)
|
||||
end
|
||||
|
||||
|
||||
-- defined as local at the begining of the file
|
||||
version = function(major, minor, patch)
|
||||
version = function(major, minor, patch, prerelease)
|
||||
assert(major, "At least one parameter is needed")
|
||||
|
||||
if type(major) == 'string' then
|
||||
local sMajor, sMinor, sPatch = major:match("^(%d+)%.?(%d*)%.?(%d*)$")
|
||||
assert(type(sMajor) == 'string', ("Could not version number(s) from %q"):format(major))
|
||||
local sMajor, sMinor, sPatch, sPrerelease = major:match("^(%d+)%.?(%d*)%.?(%d*)(.-)$")
|
||||
assert(type(sMajor) == 'string', ("Could not extract version number(s) from %q"):format(major))
|
||||
major, minor, patch = tonumber(sMajor), tonumber(sMinor), tonumber(sPatch)
|
||||
if present(sPrerelease) then
|
||||
prerelease = filterPrerelease(sPrerelease)
|
||||
end
|
||||
end
|
||||
|
||||
patch = patch or 0
|
||||
@ -61,7 +77,8 @@ version = function(major, minor, patch)
|
||||
checkPositiveInteger(minor, "minor")
|
||||
checkPositiveInteger(patch, "patch")
|
||||
|
||||
return setmetatable({major=major, minor=minor, patch=patch}, mt)
|
||||
local result = {major=major, minor=minor, patch=patch, prerelease=prerelease}
|
||||
return setmetatable(result, mt)
|
||||
end
|
||||
|
||||
return version
|
||||
|
@ -1,9 +1,10 @@
|
||||
local v = require 'semver'
|
||||
|
||||
local function checkVersion(ver, major, minor, patch)
|
||||
local function checkVersion(ver, major, minor, patch, prerelease)
|
||||
assert_equal(major, ver.major)
|
||||
assert_equal(minor, ver.minor)
|
||||
assert_equal(patch, ver.patch)
|
||||
assert_equal(prerelease, ver.prerelease)
|
||||
end
|
||||
|
||||
context('semver', function()
|
||||
@ -22,6 +23,10 @@ context('semver', function()
|
||||
it('parses 1 number correctly', function()
|
||||
checkVersion(v(1), 1,0,0)
|
||||
end)
|
||||
|
||||
it('parses prereleases, if they exist', function()
|
||||
checkVersion(v(1,2,3,"alpha"), 1,2,3,"alpha")
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("from strings", function()
|
||||
@ -37,6 +42,9 @@ context('semver', function()
|
||||
test("5", function()
|
||||
checkVersion( v'5', 5,0,0)
|
||||
end)
|
||||
test("1.2.3-alpha", function()
|
||||
checkVersion( v'1.2.3-alpha', 1,2,3,'alpha' )
|
||||
end)
|
||||
end)
|
||||
|
||||
describe('errors', function()
|
||||
@ -72,6 +80,10 @@ context('semver', function()
|
||||
it("works with major, minor and patch", function()
|
||||
assert_equal("1.2.3", tostring(v(1,2,3)))
|
||||
end)
|
||||
|
||||
it("works with a prerelease", function()
|
||||
assert_equal("1.2.3-beta", tostring(v(1,2,3,'beta')))
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("==", function()
|
||||
@ -81,6 +93,9 @@ context('semver', function()
|
||||
it("is false when major, minor and patch are not the same", function()
|
||||
assert_not_equal(v(1,2,3), v(4,5,6))
|
||||
end)
|
||||
it("false if all is the same except the prerelease", function()
|
||||
assert_not_equal(v(1,2,3), v'1.2.3-alpha')
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("<", function()
|
||||
|
Loading…
Reference in New Issue
Block a user