mirror of
https://github.com/sbrl/Minetest-WorldEditAdditions.git
synced 2024-11-26 09:03:01 +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({
|
worldeditadditions_core = EventEmitter.new({
|
||||||
version = "1.15-dev",
|
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
|
-- @value string
|
||||||
dirsep = directory_separator,
|
dirsep = directory_separator,
|
||||||
--- The full absolute filepath to the mod worldeditadditions_core
|
--- 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.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.Set = dofile(wea_c.modpath.."/utils/set.lua")
|
||||||
|
|
||||||
wea_c.Vector3 = dofile(wea_c.modpath.."/utils/vector3.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.pos = dofile(modpath.."/core/pos.lua") -- AFTER EventEmitter
|
||||||
wea_c.safe_function = dofile(modpath.."/core/safe_function.lua")
|
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