From e81590288f5aa133efbf8e53e3366ed715f1d7fd Mon Sep 17 00:00:00 2001 From: Daniel Silverstone Date: Thu, 23 Aug 2012 22:47:46 +0100 Subject: CLOD: reorder code and tidy for better coverage testing --- lib/clod.lua | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/lib/clod.lua b/lib/clod.lua index 3e70ca2..b1e5ccd 100644 --- a/lib/clod.lua +++ b/lib/clod.lua @@ -21,7 +21,19 @@ local metadata = setmetatable({}, {__mode = "k"}) -- metatable for settings objects local settings_mt = {} -local gen_settings + +-- Helper routines +local 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 function settings_mt:__index(subkey) local meta = metadata[self] @@ -152,27 +164,11 @@ function settings_mt:__newindex(subkey, value) insert_after(before, {}) before = before.next end - insert_after(before, { - key = key, - value = value, - }) + insert_after(before, { key = key, value = value }) confmeta.settings[key] = before.next 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 = {} @@ -181,16 +177,16 @@ function methods:serialise() local retstr = {} local function serialise_entry(entry) local key, value, line = entry.key, entry.value, "" - if entry.key then + if key then local vtype = type(value) + assert((vtype == "string" or vtype == "number" or vtype == "boolean"), + "Unexpected " .. vtype .. " in key: " .. key) if vtype == "string" then line = ("%s %q"):format(key, value) elseif vtype == "number" then line = ("%s = %d"):format(key, value) elseif vtype == "boolean" then line = ("%s = %s"):format(key, value and "true" or "false") - else - line = ("-- %s was a %s. Cannot serialise"):format(key, vtype) end end retstr[#retstr+1] = line -- cgit v1.2.1