diff options
author | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-08-23 11:29:32 +0100 |
---|---|---|
committer | Daniel Silverstone <dsilvers@digital-scurf.org> | 2012-08-23 11:29:32 +0100 |
commit | 0365e1bb27e6bedcba4b9b62baaa08d60115ca9a (patch) | |
tree | a4fe3b085a45c513324f88be460ee80affe8643e /lib | |
parent | db1f5ae853270af10ed6d9c4b29d30721d6f4126 (diff) | |
download | clod-0365e1bb27e6bedcba4b9b62baaa08d60115ca9a.tar.gz |
Reading of settings back now works
Diffstat (limited to 'lib')
-rw-r--r-- | lib/clod.lua | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/lib/clod.lua b/lib/clod.lua index d25048b..7058ab3 100644 --- a/lib/clod.lua +++ b/lib/clod.lua @@ -12,12 +12,47 @@ local loadstring = loadstring local tconcat = table.concat local setmetatable = setmetatable local setfenv = setfenv +local pairs = pairs -- metatable for clod config operations local clod_mt = {} -- metadata for clod config instances local metadata = setmetatable({}, {__mode = "k"}) +-- metatable for settings objects +local settings_mt = {} +local gen_settings + +function settings_mt:__index(subkey) + local meta = metadata[self] + local confmeta = metadata[meta.conf] + local key = subkey + if meta.prefix then + key = meta.prefix .. "." .. subkey + end + if confmeta.settings[key] then + return confmeta.settings[key].value + end + for k in pairs(confmeta.settings) do + if k:sub(1,#key) == key then + return gen_settings(self, key) + end + end +end + +-- Helper routines +function gen_settings(tab, prefix) + local meta = metadata[tab] + local clodconf = meta.conf or tab + local newmeta = { + conf = clodconf, + prefix = prefix + } + local ret = setmetatable({}, settings_mt) + metadata[ret] = newmeta + return ret +end + -- Methods for clod instances local methods = {} |