Software / code / prosody
Comparison
core/modulemanager.lua @ 2151:3bb7c1daa93f
modulemanager: New module API methods for getting config options with type conversion, get_option_string, get_option_number, get_option_boolean, get_option_array, get_option_set
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Mon, 23 Nov 2009 16:07:33 +0000 |
| parent | 2072:464a5392bc80 |
| child | 2270:97f25da177af |
comparison
equal
deleted
inserted
replaced
| 2146:5c54097ef84a | 2151:3bb7c1daa93f |
|---|---|
| 26 local t_insert, t_concat = table.insert, table.concat; | 26 local t_insert, t_concat = table.insert, table.concat; |
| 27 local type = type; | 27 local type = type; |
| 28 local next = next; | 28 local next = next; |
| 29 local rawget = rawget; | 29 local rawget = rawget; |
| 30 local error = error; | 30 local error = error; |
| 31 local tostring = tostring; | 31 local tostring, tonumber = tostring, tonumber; |
| 32 | |
| 33 local array, set = require "util.array", require "util.set"; | |
| 32 | 34 |
| 33 local autoload_modules = {"presence", "message", "iq"}; | 35 local autoload_modules = {"presence", "message", "iq"}; |
| 34 | 36 |
| 35 -- We need this to let modules access the real global namespace | 37 -- We need this to let modules access the real global namespace |
| 36 local _G = _G; | 38 local _G = _G; |
| 398 end | 400 end |
| 399 end | 401 end |
| 400 return value; | 402 return value; |
| 401 end | 403 end |
| 402 | 404 |
| 405 function api:get_option_string(...) | |
| 406 local value = self:get_option(...); | |
| 407 if type(value) == "table" then | |
| 408 if #value > 1 then | |
| 409 self:log("error", "Config option '%s' does not take a list, using just the first item", name); | |
| 410 end | |
| 411 value = value[1]; | |
| 412 end | |
| 413 if value == nil then | |
| 414 return nil; | |
| 415 end | |
| 416 return tostring(value); | |
| 417 end | |
| 418 | |
| 419 function api:get_option_number(name, ...) | |
| 420 local value = self:get_option(name, ...); | |
| 421 if type(value) == "table" then | |
| 422 if #value > 1 then | |
| 423 self:log("error", "Config option '%s' does not take a list, using just the first item", name); | |
| 424 end | |
| 425 value = value[1]; | |
| 426 end | |
| 427 local ret = tonumber(value); | |
| 428 if value ~= nil and ret == nil then | |
| 429 self:log("error", "Config option '%s' not understood, expecting a number", name); | |
| 430 end | |
| 431 return ret; | |
| 432 end | |
| 433 | |
| 434 function api:get_option_boolean(name, ...) | |
| 435 local value = self:get_option(name, ...); | |
| 436 if type(value) == "table" then | |
| 437 if #value > 1 then | |
| 438 self:log("error", "Config option '%s' does not take a list, using just the first item", name); | |
| 439 end | |
| 440 value = value[1]; | |
| 441 end | |
| 442 if value == nil then | |
| 443 return nil; | |
| 444 end | |
| 445 local ret = value == true or value == "true" or value == 1 or nil; | |
| 446 if ret == nil then | |
| 447 ret = (value == false or value == "false" or value == 0); | |
| 448 if ret then | |
| 449 ret = false; | |
| 450 else | |
| 451 ret = nil; | |
| 452 end | |
| 453 end | |
| 454 if ret == nil then | |
| 455 self:log("error", "Config option '%s' not understood, expecting true/false", name); | |
| 456 end | |
| 457 return ret; | |
| 458 end | |
| 459 | |
| 460 function api:get_option_array(name, ...) | |
| 461 local value = self:get_option(name, ...); | |
| 462 | |
| 463 if value == nil then | |
| 464 return nil; | |
| 465 end | |
| 466 | |
| 467 if type(value) ~= "table" then | |
| 468 return array{ value }; -- Assume any non-list is a single-item list | |
| 469 end | |
| 470 | |
| 471 return array():append(value); -- Clone | |
| 472 end | |
| 473 | |
| 474 function api:get_option_set(name, ...) | |
| 475 local value = self:get_option_array(name, ...); | |
| 476 | |
| 477 if value == nil then | |
| 478 return nil; | |
| 479 end | |
| 480 | |
| 481 return set.new(value); | |
| 482 end | |
| 483 | |
| 403 local t_remove = _G.table.remove; | 484 local t_remove = _G.table.remove; |
| 404 local module_items = multitable_new(); | 485 local module_items = multitable_new(); |
| 405 function api:add_item(key, value) | 486 function api:add_item(key, value) |
| 406 self.items = self.items or {}; | 487 self.items = self.items or {}; |
| 407 self.items[key] = self.items[key] or {}; | 488 self.items[key] = self.items[key] or {}; |