aboutsummaryrefslogtreecommitdiff
path: root/src/lib/instance.lua
diff options
context:
space:
mode:
authorNathan Reiner <nathan@nathanreiner.xyz>2026-04-20 13:43:01 +0200
committerNathan Reiner <nathan@nathanreiner.xyz>2026-04-20 13:43:01 +0200
commit0686b40f979f4607b3fd8cca21c463e98f617666 (patch)
tree355e8a7bfd4b37510d05370876a9d8cedfdcd5d7 /src/lib/instance.lua
parentba561ebd063b391013b6c9c1fcc9b1838dd422e6 (diff)
implement builder and instance
Diffstat (limited to 'src/lib/instance.lua')
-rw-r--r--src/lib/instance.lua54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/lib/instance.lua b/src/lib/instance.lua
new file mode 100644
index 0000000..2de2c5f
--- /dev/null
+++ b/src/lib/instance.lua
@@ -0,0 +1,54 @@
+Instance = {}
+
+function Instance:new()
+ local instance = {
+ entries = {},
+ }
+
+ setmetatable(instance, self)
+ self.__index = self
+
+ return instance
+end
+
+function Instance:register(path, content)
+ self.entries[#self.entries + 1] = {
+ path = path,
+ content = content,
+ }
+end
+
+function Instance:save_to(target)
+ for _, entry in ipairs(self.entries) do
+ local target_entry = Path:new(target) / entry.path
+
+ if entry.content == nil then
+ target_entry:make_directory { create_parents = true }
+ else
+ target_entry:parent():make_directory { create_parents = true }
+ local file = target_entry:open('w')
+ file:write(entry.content)
+ file:close()
+ end
+ end
+end
+
+function Instance:__tostring()
+ local output = [[{
+ entries = {
+]]
+
+ for _, entry in ipairs(self.entries) do
+ output = output .. [[ {
+ path = ]] .. tostring(entry.path) .. [[,
+ content = ]] .. (entry.content and ("[[\n " .. entry.content:gsub('\n', '\n ') .. "\n ]]") or "nil") .. [[,
+ },
+]]
+ end
+
+ output = output .. [[ }
+}
+]]
+
+ return output
+end