Talk:Creating defaults
98,518pages on
this wiki
this wiki
Back to page
Idea for your "Advanced Default Setting Updating"
Edit
I just used the already given method of updating defaults for some time, but began feeling tired of the unflexibility and size of this code. So I decided to work out my own and ask you, what you think of it.
This code let us traverse all (sub-)tables of our settings (= database) and take over values that can be used in future (if the base-structure of the table hasn't changed)
So there is no need to stretch our code any further for every sub-sub-sub-....table we add to the settings/defaults.
Here we go:
function YourAddon_UpdateDB(newDB, oldDB)
local k, v;
for k, v in pairs(newDB) do
if (type(v) == "table") then
if (oldDB and oldDB[k] ~= nil) then
newDB[k] = YourAddon_UpdateDB(v, oldDB[k]);
end
elseif (oldDB and oldDB[k] ~= nil and k ~= "version") then
newDB[k] = oldDB[k];
end
end
return newDB;
end
And here what the code is used to be, step by step:
function YourAddon_UpdateDB(the defaultDB [used as "the base" for the newDB], the DB to check against the defaults)
local k, v;
-- Moving through every Key(k) in de defaultDB
-- If the type of Value(v) is "table" ...
-- If the Key exists in the oldDB ...
-- Call self and submit the subtables to traverse them
end
-- Elseif Key exists in oldDB and isn't called "version" (we don't want to take over the old version#) ...
-- Take the Value of the oldDB into the newDB
end
end
-- Return the newDB to the caller
end
Calling this method could be looking like this:
if (not YourAddonDB["version"] or YourAddonDB["version"] ~= defaultDB["version"]) then YourAddonDB = YourAddon_updateDB(defaultDB, YourAddonDB); end
That's all folks.