diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-04-16 15:18:10 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-04-16 15:18:10 +0200 |
| commit | 128901970874e9939621f6fa0384a56600ee43c9 (patch) | |
| tree | f458b290d9dcfbe45575ef71100c35da16fc89f2 /src/lib/path.lua | |
| parent | 31157deb353acd0233e56cdf8ebf1fbe201631b3 (diff) | |
add extensions and lib
Diffstat (limited to 'src/lib/path.lua')
| -rw-r--r-- | src/lib/path.lua | 61 |
1 files changed, 61 insertions, 0 deletions
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 + } +} |