mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-26 00:53:00 +00:00
wea_core.path added
This commit is contained in:
parent
9f85a7ca0d
commit
3c88ae9e23
6 changed files with 93 additions and 24 deletions
17
.tests/path/join.test.lua
Normal file
17
.tests/path/join.test.lua
Normal file
|
@ -0,0 +1,17 @@
|
|||
local Path = require("worldeditadditions_core.utils.path")
|
||||
|
||||
describe("Path.join", function()
|
||||
it("should correct bad formatting", function()
|
||||
local result, err = Path.join("C:\\Users\\me\\", "/Documents//code.lua")
|
||||
assert.is_nil(err)
|
||||
assert.are.same(
|
||||
table.concat({"C:","Users","me","Documents","code.lua"}, Path.sep),
|
||||
result
|
||||
)
|
||||
end)
|
||||
it("should return an error if not a string", function()
|
||||
local result, err = Path.join("C://Users/me", 123)
|
||||
assert.is_false(result)
|
||||
assert.are.same("string", type(err))
|
||||
end)
|
||||
end)
|
17
.tests/path/new.test.lua
Normal file
17
.tests/path/new.test.lua
Normal file
|
@ -0,0 +1,17 @@
|
|||
local Path = require("worldeditadditions_core.utils.path")
|
||||
|
||||
describe("Path.new", function()
|
||||
it("should correct bad formatting", function()
|
||||
local result, err = Path.new("C:\\Users\\me\\".."/Documents//code.lua")
|
||||
assert.is_nil(err)
|
||||
assert.are.same(
|
||||
table.concat({"C:","Users","me","Documents","code.lua"}, Path.sep),
|
||||
result
|
||||
)
|
||||
end)
|
||||
it("should return an error if not a string", function()
|
||||
local result, err = Path.new(123)
|
||||
assert.is_false(result)
|
||||
assert.are.same("string", type(err))
|
||||
end)
|
||||
end)
|
|
@ -18,7 +18,8 @@ end
|
|||
|
||||
worldeditadditions_core = EventEmitter.new({
|
||||
version = "1.15-dev",
|
||||
--- The directory separator on the current host system
|
||||
--- The directory separator on the current host system [[ DEPRECATED ]]
|
||||
--- Use worldeditadditions_core.path.sep instead
|
||||
-- @value string
|
||||
dirsep = directory_separator,
|
||||
--- The full absolute filepath to the mod worldeditadditions_core
|
||||
|
@ -45,6 +46,8 @@ wea_c.EventEmitter = EventEmitter
|
|||
|
||||
wea_c.notify = dofile(wea_c.modpath.."/utils/notify/notify.lua") -- BEFORE anything that could use this
|
||||
|
||||
wea_c.Path = dofile(wea_c.modpath.."/utils/path.lua") -- BEFORE anything that could use this
|
||||
|
||||
wea_c.Set = dofile(wea_c.modpath.."/utils/set.lua")
|
||||
|
||||
wea_c.Vector3 = dofile(wea_c.modpath.."/utils/vector3.lua")
|
||||
|
@ -84,7 +87,7 @@ dofile(wea_c.modpath.."/utils/player.lua") -- Player info functions
|
|||
|
||||
|
||||
|
||||
wea_c.setting_handler = dofile(wea_c.modpath.."/utils/setting_handler.lua") -- AFTER parser
|
||||
wea_c.settings = dofile(wea_c.modpath.."/utils/setting_handler.lua") -- AFTER parser
|
||||
|
||||
wea_c.pos = dofile(modpath.."/core/pos.lua") -- AFTER EventEmitter
|
||||
wea_c.safe_function = dofile(modpath.."/core/safe_function.lua")
|
||||
|
|
54
worldeditadditions_core/utils/path.lua
Normal file
54
worldeditadditions_core/utils/path.lua
Normal file
|
@ -0,0 +1,54 @@
|
|||
--- A path manipulation class.
|
||||
-- @class worldeditadditions_core.Path
|
||||
local path = {}
|
||||
|
||||
-- Helper functions
|
||||
local check = function( ... )
|
||||
for _, v in ipairs( ... ) do
|
||||
if type(v) ~= "string" then
|
||||
return false, v .. " is not a string."
|
||||
end
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
--- The directory separator on the current host system
|
||||
-- @value string
|
||||
path.sep = "/"
|
||||
if package and package.config then
|
||||
path.sep = package.config:sub(1,1)
|
||||
end
|
||||
|
||||
--- Format string into path
|
||||
-- @param str string The string to process
|
||||
-- @return string|false, string? The formatted path string or
|
||||
-- false and an error message.
|
||||
-- @example Basic usage
|
||||
-- local path = path.new("C:\\Users\\me\\".."/Documents//code.lua")
|
||||
path.new = function( str )
|
||||
local ok, err = check(str)
|
||||
if not ok then return false, err end
|
||||
return ({str:gsub("[/\\]+", path.sep)})[1]
|
||||
end
|
||||
|
||||
--- Joins the given path segments into a single path with dirsep.
|
||||
-- @param ... string The path fragments to process and join.
|
||||
-- @return string|false, string? The joined path or
|
||||
-- false and an error message.
|
||||
-- @example Basic usage
|
||||
-- local path = file_path("C:\\Users", "me", "/Documents/code.lua")
|
||||
path.join = function( ... )
|
||||
local pathlets = { ... }
|
||||
local ok, err = check(pathlets)
|
||||
if not ok then return false, err end
|
||||
return path.new(table.concat(pathlets, path.sep))
|
||||
end
|
||||
|
||||
local Path = {}
|
||||
Path.__name = "Path" -- A hack to allow easier identification
|
||||
Path.__index = Path
|
||||
Path.__call = function(self, ...)
|
||||
return self.join(...)
|
||||
end
|
||||
|
||||
return setmetatable(path, Path)
|
|
@ -1,5 +0,0 @@
|
|||
local wea_c = worldeditadditions_core
|
||||
|
||||
wea_c.path = {
|
||||
join = dofile(wea_c.modpath.."/utils/format/join.lua"),
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
---
|
||||
-- @module worldeditadditions_core
|
||||
local wea_c = worldeditadditions_core
|
||||
|
||||
--- Joins the given path segments into a single path with dirsep.
|
||||
-- @param ... string The path fragments to process and join.
|
||||
-- @return string The joined path.
|
||||
-- @example Basic usage
|
||||
-- local path = file_path("C:\\Users", "me", "/Documents/code.lua")
|
||||
local join = function( ... )
|
||||
local path = { ... }
|
||||
for i, v in ipairs(path) do path[i] = tostring(v) end
|
||||
return ({table.concat(path, wea_c.dirsep)
|
||||
:gsub("[/\\]+", wea_c.dirsep)})[1]
|
||||
end
|
||||
|
||||
return join
|
Loading…
Reference in a new issue