diff options
author | Matthew Wild <mwild1@gmail.com> | 2008-11-23 02:12:46 +0000 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2008-11-23 02:12:46 +0000 |
commit | d4f1fa92a2fc10324565151769344981ec26f30c (patch) | |
tree | e6c4943f39e243175910d6ad571c6a5520a224e3 /core/configmanager.lua | |
parent | a7b3157e9ff6d26b7218931646f6e02ed6063be8 (diff) | |
download | prosody-d4f1fa92a2fc10324565151769344981ec26f30c.tar.gz prosody-d4f1fa92a2fc10324565151769344981ec26f30c.zip |
New configmanager. Old-style config files still work, but will print a warning
Diffstat (limited to 'core/configmanager.lua')
-rw-r--r-- | core/configmanager.lua | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/core/configmanager.lua b/core/configmanager.lua index cc7ffb7e..5f5648b9 100644 --- a/core/configmanager.lua +++ b/core/configmanager.lua @@ -1,5 +1,7 @@ local _G = _G; +local setmetatable, loadfile, pcall, rawget, rawset, io = + setmetatable, loadfile, pcall, rawget, rawset, io; module "configmanager" local parsers = {}; @@ -21,6 +23,10 @@ function section_mt(section_name) end }; end +function getconfig() + return config; +end + function get(host, section, key) local sec = config[host][section]; if sec then @@ -45,15 +51,20 @@ function set(host, section, key, value) end function load(filename, format) + format = format or filename:match("%w+$"); if parsers[format] and parsers[format].load then local f = io.open(filename); if f then - local ok, err = parsers[format](f:read("*a")); + local ok, err = parsers[format].load(f:read("*a")); f:close(); return ok, err; end end - return false, "no parser"; + if not format then + return nil, "no parser specified"; + else + return false, "no parser"; + end end function save(filename, format) @@ -65,21 +76,28 @@ function addparser(format, parser) end end +-- Built-in Lua parser do + local loadstring, pcall, setmetatable = _G.loadstring, _G.pcall, _G.setmetatable; + local setfenv, rawget, tostring = _G.setfenv, _G.rawget, _G.tostring; parsers.lua = {}; function parsers.lua.load(data) - local env = setmetatable({}, { __index = function (t, k) - if k:match("^mod_") then - return function (settings_table) + local env; + env = setmetatable({ Host = true; host = true; }, { __index = function (t, k) + return rawget(_G, k) or + function (settings_table) config[__currenthost or "*"][k] = settings_table; end; - end - return rawget(_G, k); + end, + __newindex = function (t, k, v) + set(env.__currenthost or "*", "core", k, v); end}); function env.Host(name) - env.__currenthost = name; + rawset(env, "__currenthost", name); + set(name or "*", "core", "defined", true); end + env.host = env.Host; local chunk, err = loadstring(data); @@ -95,8 +113,6 @@ do return nil, err; end - - return true; end |