From 665853d99933d25ff67a65ef44e9604606ffb752 Mon Sep 17 00:00:00 2001 From: Florian Zeitz <florob@babelmonkeys.de> Date: Fri, 2 Dec 2011 19:24:54 +0100 Subject: util.dataforms: Fix form verification --- util/dataforms.lua | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'util') diff --git a/util/dataforms.lua b/util/dataforms.lua index e4d24cf6..b69df819 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -120,12 +120,18 @@ function form_t.data(layout, stanza) end end - local reader = field_readers[field.type]; - local verifier = field.verifier or field_verifiers[field.type]; - if reader then - data[field.name] = reader(tag); - if verifier then - errors[field.name] = verifier(data[field.name], tag, field.required); + if not tag then + if field.required then + errors[field.name] = "Required value missing"; + end + else + local reader = field_readers[field.type]; + local verifier = field.verifier or field_verifiers[field.type]; + if reader then + data[field.name] = reader(tag); + if verifier then + errors[field.name] = verifier(data[field.name], tag, field.required); + end end end end @@ -161,7 +167,7 @@ field_readers["jid-single"] = field_verifiers["jid-single"] = function (data, field_tag, required) - if #data == 0 and required then + if ((not data) or (#data == 0)) and required then return "Required value missing"; end if not jid_prep(data) then -- cgit v1.2.3 From fef2f58cb652bf2a0fd8ed27cf99e5b7bed63f42 Mon Sep 17 00:00:00 2001 From: Florian Zeitz <florob@babelmonkeys.de> Date: Sat, 3 Dec 2011 17:10:48 +0100 Subject: util.dataforms: Fix verfication for booleans --- util/dataforms.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'util') diff --git a/util/dataforms.lua b/util/dataforms.lua index b69df819..d4a1865c 100644 --- a/util/dataforms.lua +++ b/util/dataforms.lua @@ -252,7 +252,7 @@ field_readers["boolean"] = field_verifiers["boolean"] = function (data, field_tag, required) data = field_readers["text-single"](field_tag); - if #data == 0 and required then + if ((not data) or (#data == 0)) and required then return "Required value missing"; end if data ~= "1" and data ~= "true" and data ~= "0" and data ~= "false" then -- cgit v1.2.3 From f1f5f74ad3c9b66cf60b5e86b5fc12afe52a448b Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Wed, 7 Dec 2011 05:04:55 +0000 Subject: util.array: Add pluck() method to pick a given property from each item --- util/array.lua | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'util') diff --git a/util/array.lua b/util/array.lua index 5dbd3037..cf586214 100644 --- a/util/array.lua +++ b/util/array.lua @@ -60,6 +60,13 @@ function array_base.sort(outa, ina, ...) return outa; end +function array_base.pluck(outa, ina, key) + for i=1,#ina do + outa[i] = ina[i][key]; + end + return outa; +end + --- These methods only mutate function array_methods:random() return self[math.random(1,#self)]; -- cgit v1.2.3 From f1f40bc3ca38cf67e38bcf844a6d99a9a4f9e9bb Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Wed, 7 Dec 2011 05:14:58 +0000 Subject: util.array: Expand some of the more basic methods to act more sensibly than their names suggested --- util/array.lua | 36 +++++++++++++++++++++++++++--------- 1 file changed, 27 insertions(+), 9 deletions(-) (limited to 'util') diff --git a/util/array.lua b/util/array.lua index cf586214..cbb051d3 100644 --- a/util/array.lua +++ b/util/array.lua @@ -25,6 +25,15 @@ end setmetatable(array, { __call = new_array }); +-- Read-only methods +function array_methods:random() + return self[math.random(1,#self)]; +end + +-- These methods can be called two ways: +-- array.method(existing_array, [params [, ...]]) -- Create new array for result +-- existing_array:method([params, ...]) -- Transform existing array into result +-- function array_base.map(outa, ina, func) for k,v in ipairs(ina) do outa[k] = func(v); @@ -67,11 +76,7 @@ function array_base.pluck(outa, ina, key) return outa; end ---- These methods only mutate -function array_methods:random() - return self[math.random(1,#self)]; -end - +--- These methods only mutate the array function array_methods:shuffle(outa, ina) local len = #self; for i=1,#self do @@ -98,10 +103,23 @@ function array_methods:append(array) return self; end -array_methods.push = table.insert; -array_methods.pop = table.remove; -array_methods.concat = table.concat; -array_methods.length = function (t) return #t; end +function array_methods:push(x) + table.insert(self, x); +end + +function array_methods:pop(x) + local v = self[x]; + table.remove(self, x); + return v; +end + +function array_methods:concat(sep) + return table.concat(array.map(self, tostring), sep); +end + +function array_methods:length() + return #self; +end --- These methods always create a new array function array.collect(f, s, var) -- cgit v1.2.3 From 0356027c053b6354e4ffda91ae44f7fc66af8411 Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Wed, 7 Dec 2011 05:17:39 +0000 Subject: util.iterators: it2table: Fix variable name --- util/iterators.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'util') diff --git a/util/iterators.lua b/util/iterators.lua index 2a87e97a..aa0b172b 100644 --- a/util/iterators.lua +++ b/util/iterators.lua @@ -140,7 +140,7 @@ end -- Treat the return of an iterator as key,value pairs, -- and build a table function it2table(f, s, var) - local t, var = {}; + local t, var2 = {}; while true do var, var2 = f(s, var); if var == nil then break; end -- cgit v1.2.3 From 5cc76d979406b69055da5967865a7c35fe99bb8a Mon Sep 17 00:00:00 2001 From: Waqas Hussain <waqas20@gmail.com> Date: Fri, 9 Dec 2011 11:57:14 +0500 Subject: util.array: Make array:push() chainable. --- util/array.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'util') diff --git a/util/array.lua b/util/array.lua index cbb051d3..fdf3c9a3 100644 --- a/util/array.lua +++ b/util/array.lua @@ -105,6 +105,7 @@ end function array_methods:push(x) table.insert(self, x); + return self; end function array_methods:pop(x) -- cgit v1.2.3 From 5a64ace81c91f534637555c60ee35dbfa5f6ac26 Mon Sep 17 00:00:00 2001 From: Waqas Hussain <waqas20@gmail.com> Date: Fri, 9 Dec 2011 12:02:21 +0500 Subject: util.array: Avoid globals. --- util/array.lua | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) (limited to 'util') diff --git a/util/array.lua b/util/array.lua index fdf3c9a3..5dc604ba 100644 --- a/util/array.lua +++ b/util/array.lua @@ -9,6 +9,11 @@ local t_insert, t_sort, t_remove, t_concat = table.insert, table.sort, table.remove, table.concat; +local setmetatable = setmetatable; +local math_random = math.random; +local pairs, ipairs = pairs, ipairs; +local tostring = tostring; + local array = {}; local array_base = {}; local array_methods = {}; @@ -27,7 +32,7 @@ setmetatable(array, { __call = new_array }); -- Read-only methods function array_methods:random() - return self[math.random(1,#self)]; + return self[math_random(1,#self)]; end -- These methods can be called two ways: @@ -80,7 +85,7 @@ end function array_methods:shuffle(outa, ina) local len = #self; for i=1,#self do - local r = math.random(i,len); + local r = math_random(i,len); self[i], self[r] = self[r], self[i]; end return self; @@ -104,18 +109,18 @@ function array_methods:append(array) end function array_methods:push(x) - table.insert(self, x); + t_insert(self, x); return self; end function array_methods:pop(x) local v = self[x]; - table.remove(self, x); + t_remove(self, x); return v; end function array_methods:concat(sep) - return table.concat(array.map(self, tostring), sep); + return t_concat(array.map(self, tostring), sep); end function array_methods:length() @@ -128,7 +133,7 @@ function array.collect(f, s, var) while true do var = f(s, var); if var == nil then break; end - table.insert(t, var); + t_insert(t, var); end return setmetatable(t, array_mt); end -- cgit v1.2.3 From b1a0c2c1a8bdfcb1ec2dc3e6a1c02dcfa838649c Mon Sep 17 00:00:00 2001 From: James Callahan <james@chatid.com> Date: Mon, 12 Dec 2011 17:08:48 +1100 Subject: util/datamanager: Use package.config to figure out directory seperator --- util/datamanager.lua | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'util') diff --git a/util/datamanager.lua b/util/datamanager.lua index d5e9c88c..a5d676cc 100644 --- a/util/datamanager.lua +++ b/util/datamanager.lua @@ -1,7 +1,7 @@ -- Prosody IM -- Copyright (C) 2008-2010 Matthew Wild -- Copyright (C) 2008-2010 Waqas Hussain --- +-- -- This project is MIT/X11 licensed. Please see the -- COPYING file in the source package for more information. -- @@ -20,7 +20,7 @@ local error = error; local next = next; local t_insert = table.insert; local append = require "util.serialization".append; -local path_separator = "/"; if os.getenv("WINDIR") then path_separator = "\\" end +local path_separator = assert ( package.config:match ( "^([^\n]+)" ) , "package.config not in standard form" ) -- Extract directory seperator from package.config (an undocumented string that comes with lua) local lfs = require "lfs"; local prosody = prosody; local raw_mkdir; @@ -72,7 +72,7 @@ local function callback(username, host, datastore, data) username, host, datastore, data = f(username, host, datastore, data); if username == false then break; end end - + return username, host, datastore, data; end function add_callback(func) -- cgit v1.2.3 From d0f4bbd2dbe8a2ff9088cd47dad8418d1030637e Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Wed, 21 Dec 2011 07:58:22 +0000 Subject: util.stanza: Remove unused __add metamethod --- util/stanza.lua | 5 ----- 1 file changed, 5 deletions(-) (limited to 'util') diff --git a/util/stanza.lua b/util/stanza.lua index de83977f..600212a4 100644 --- a/util/stanza.lua +++ b/util/stanza.lua @@ -258,11 +258,6 @@ function stanza_mt.get_error(stanza) return type, condition or "undefined-condition", text; end -function stanza_mt.__add(s1, s2) - return s1:add_direct_child(s2); -end - - do local id = 0; function new_id() -- cgit v1.2.3 From e898c683046c6ed14c3f3565418578661b986821 Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Fri, 13 Jan 2012 15:46:36 +0000 Subject: util.debug: Adjust level within get_locals_table() to account for the additional depth of this function itself --- util/debug.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'util') diff --git a/util/debug.lua b/util/debug.lua index 22d02bf2..2170a6d1 100644 --- a/util/debug.lua +++ b/util/debug.lua @@ -9,6 +9,7 @@ local censored_names = { }; local function get_locals_table(level) + level = level + 1; -- Skip this function itself local locals = {}; for local_num = 1, math.huge do local name, value = debug.getlocal(level, local_num); -- cgit v1.2.3 From 8cc3779cc2aace85b44635460355601c164277ad Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Fri, 13 Jan 2012 23:30:00 +0000 Subject: util.throttle: Import setmetatable --- util/throttle.lua | 1 + 1 file changed, 1 insertion(+) (limited to 'util') diff --git a/util/throttle.lua b/util/throttle.lua index 8b62e797..82b0a67b 100644 --- a/util/throttle.lua +++ b/util/throttle.lua @@ -1,5 +1,6 @@ local gettime = require "socket".gettime; +local setmetatable = setmetatable; module "throttle" -- cgit v1.2.3 From 08fe482e7f8c4e1971d5a4a66a3419bca4fb4022 Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Fri, 13 Jan 2012 23:30:32 +0000 Subject: util.throttle: Fix 'outstanding' return value --- util/throttle.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'util') diff --git a/util/throttle.lua b/util/throttle.lua index 82b0a67b..2e901158 100644 --- a/util/throttle.lua +++ b/util/throttle.lua @@ -34,7 +34,7 @@ function throttle:poll(cost, split) if split then self.balance = 0; end - return false, balance, (cost-self.balance); + return false, balance, (cost-balance); end end -- cgit v1.2.3 From d79def083bd4f80242ada7e98f4c24d85787305f Mon Sep 17 00:00:00 2001 From: Waqas Hussain <waqas20@gmail.com> Date: Wed, 18 Jan 2012 08:54:26 +0500 Subject: util.json: Added function encode_ordered(object). --- util/json.lua | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) (limited to 'util') diff --git a/util/json.lua b/util/json.lua index 5d0b0876..efc602f0 100644 --- a/util/json.lua +++ b/util/json.lua @@ -1,6 +1,6 @@ local type = type; -local t_insert, t_concat, t_remove = table.insert, table.concat, table.remove; +local t_insert, t_concat, t_remove, t_sort = table.insert, table.concat, table.remove, table.sort; local s_char = string.char; local tostring, tonumber = tostring, tonumber; local pairs, ipairs = pairs, ipairs; @@ -79,11 +79,25 @@ function tablesave(o, buffer) if next(__hash) ~= nil or next(hash) ~= nil or next(__array) == nil then t_insert(buffer, "{"); local mark = #buffer; - for k,v in pairs(hash) do - stringsave(k, buffer); - t_insert(buffer, ":"); - simplesave(v, buffer); - t_insert(buffer, ","); + if buffer.ordered then + local keys = {}; + for k in pairs(hash) do + t_insert(keys, k); + end + t_sort(keys); + for _,k in ipairs(keys) do + stringsave(k, buffer); + t_insert(buffer, ":"); + simplesave(hash[k], buffer); + t_insert(buffer, ","); + end + else + for k,v in pairs(hash) do + stringsave(k, buffer); + t_insert(buffer, ":"); + simplesave(v, buffer); + t_insert(buffer, ","); + end end if next(__hash) ~= nil then t_insert(buffer, "\"__hash\":["); @@ -129,6 +143,11 @@ function json.encode(obj) simplesave(obj, t); return t_concat(t); end +function json.encode_ordered(obj) + local t = { ordered = true }; + simplesave(obj, t); + return t_concat(t); +end ----------------------------------- -- cgit v1.2.3 From b7625791b1405721a4a9d9d7392328a6a372c2ef Mon Sep 17 00:00:00 2001 From: Matthew Wild <mwild1@gmail.com> Date: Sun, 22 Jan 2012 19:10:13 +0000 Subject: util.helpers: After nearly 'fixing' this code, I conclude it instead only deserves a bigger smile --- util/helpers.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'util') diff --git a/util/helpers.lua b/util/helpers.lua index 11356176..a8c8c612 100644 --- a/util/helpers.lua +++ b/util/helpers.lua @@ -28,7 +28,7 @@ function log_events(events, name, logger) end function revert_log_events(events) - events.fire_event, events[events.fire_event] = events[events.fire_event], nil; -- :) + events.fire_event, events[events.fire_event] = events[events.fire_event], nil; -- :)) end function get_upvalue(f, get_name) -- cgit v1.2.3