Module:Requirement
From Fallen London Wiki (Staging)
Documentation for this module may be created at Module:Requirement/doc
--[[ This module contains logic for checking whether a value of a quality
matches a given lock/unlock requirement. Intended primarily for use in
World Lock/Unlock templates, but can also be used in calculators, etc.
--]]
local p = {}
local str = require("Module:String")
local function _match(value,requirement)
if value == '0' then
return false
end
if requirement == '' or requirement == nil then
return true
end
-- requirement is "exactly [number]"
local exactvalue = string.match(requirement, '^exactly (%d+)$')
if exactvalue then
return value == exactvalue
end
-- requirement is a numerical range, inclusive ("[number] - [number]")
local rangemin, rangemax = string.match(requirement, '^(%d+)%s*%-%s*(%d+)$')
if rangemin and rangemax then
return tonumber(rangemin) <= tonumber(value) and tonumber(value) <= tonumber(rangemax)
end
-- require is just "[number]", indicating a minimum
local minvalue = string.match(requirement, '^%d+$')
if minvalue then
return tonumber(value) >= tonumber(minvalue)
end
-- escape any regex special characters in the value, since it will be interpreted as regex pattern
local escapedvalue = str._escapePattern(value)
-- requirement is a non-numerical string (possibly a list of options), see if value is somewhere in it
local stringmatch = string.match(requirement, escapedvalue)
if stringmatch then
return true
else
return false
end
end
function p.match(frame)
local value = frame.args[1] or frame.args['value']
local requirement = frame.args[2] or frame.args['requirement']
return _match(value,requirement) or ''
end
return p