From 128901970874e9939621f6fa0384a56600ee43c9 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Thu, 16 Apr 2026 15:18:10 +0200 Subject: add extensions and lib --- src/lib/init.lua | 1 + src/lib/path.lua | 61 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 src/lib/init.lua create mode 100644 src/lib/path.lua (limited to 'src/lib') diff --git a/src/lib/init.lua b/src/lib/init.lua new file mode 100644 index 0000000..4f069d0 --- /dev/null +++ b/src/lib/init.lua @@ -0,0 +1 @@ +require('lib.path') diff --git a/src/lib/path.lua b/src/lib/path.lua new file mode 100644 index 0000000..b0f0fac --- /dev/null +++ b/src/lib/path.lua @@ -0,0 +1,61 @@ +Path = {} + +function Path:new(p) + local path = { segments = p:split('/') } + + setmetatable(path, self) + self.__index = self + + return path +end + +function Path:name() + return self.segments[#self.segments] +end + +function Path:stem() + return self.segments[#self.segments]:match('[^.]+') +end + +function Path:parent() + local path = { segments = { table.unpack(self.segments, 1, #self.segments - 1) } } + + setmetatable(path, self) + self.__index = self + + return path +end + +function Path:__tostring() + return table.concat(self.segments, "/") +end + +function Path:__div(next) + return Path:new(self:__tostring() .. "/" .. next) +end + +return { + tests = { + function() + local path = Path:new("some/path/here") + assert.equals("here", path:name()) + end, + function() + local path = Path:new("some/path/here.txt") + assert.equals("here", path:stem()) + end, + function() + local path = Path:new("some/path/here.txt") + assert.equals("some/path", path:parent():__tostring()) + end, + function() + local path = Path:new("some/path/here.txt") + assert.equals("some/path/here.txt", path:__tostring()) + end, + function() + local path = Path:new("some/path/here") + path = path / 'next.txt' + assert.equals("some/path/here/next.txt", path:__tostring()) + end + } +} -- cgit v1.2.3-70-g09d2