gluon-announce, ...: don't output empty lists where not appropriate

Always output empty objects or nothing at all where objects are expected, but
no elements exist.

Also remove a few unneeded "requires", a few basic modules are provided by
announce.lua by default.
remotes/1699402720531464663/tmp_refs/heads/stable
Matthias Schiffer 2015-06-16 23:21:11 +02:00
parent 8375e82a38
commit 637df6b197
5 changed files with 50 additions and 13 deletions

View File

@ -3,6 +3,7 @@
module('gluon.announce', package.seeall)
fs = require 'luci.fs'
json = require 'luci.json'
uci = require('luci.model.uci').cursor()
util = require 'luci.util'
@ -15,7 +16,7 @@ local function collect_entry(entry)
end
function collect_dir(dir)
local ret = {}
local ret = { [json.null] = true }
for _, entry in ipairs(fs.dir(dir)) do
if entry:sub(1, 1) ~= '.' then

View File

@ -1,7 +1,3 @@
local json = require 'luci.json'
local util = require 'luci.util'
local fs = require 'nixio.fs'
local ifname_address_cache = {}
function ifname2address(ifname)
@ -26,7 +22,7 @@ function batadv()
if mac1 ~= nil and mac1 == mac2 then
ifaddress = ifname2address(ifname)
if interfaces[ifaddress] == nil then
interfaces[ifaddress] = { neighbours = {} }
interfaces[ifaddress] = { neighbours = { [json.null] = true } }
end
interfaces[ifaddress].neighbours[mac1] = { tq = tonumber(tq)
@ -35,7 +31,9 @@ function batadv()
end
end
return interfaces
if next(interfaces) then
return interfaces
end
end
return batadv()

View File

@ -1,6 +1,3 @@
local json = require 'luci.json'
local util = require 'luci.util'
local fs = require 'nixio.fs'
local iwinfo = require 'iwinfo'
function neighbours(iface)
@ -12,7 +9,9 @@ function neighbours(iface)
}
end
return stations
if next(stations) then
return stations
end
end
function interfaces()
@ -38,4 +37,6 @@ for address, iface in pairs(interfaces()) do
wifi[address] = { neighbours = neighbours(iface) }
end
return wifi
if next(wifi) then
return wifi
end

View File

@ -48,5 +48,6 @@ end
return {
wireless = nil_table(wireless),
tunnel = nil_table(tunnel),
other = nil_table(other)
other = nil_table(other),
[json.null] = true
}

View File

@ -0,0 +1,36 @@
From: Matthias Schiffer <mschiffer@universe-factory.net>
Date: Thu, 4 Jun 2015 21:03:24 +0200
Subject: luci-lib-json: ignore null keys to allow encoding empty objects
There is currently no way to encode an empty object {}, as empty tables are
encoded as empty lists [].
With this patch, encode() will ignore table fields with the key json.null (which
doesn't make sense anyways). This allows adding a field with key json.null to
force encoding it as an object.
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
diff --git a/libs/json/luasrc/json.lua b/libs/json/luasrc/json.lua
index 8dbaf91..11a5608 100644
--- a/libs/json/luasrc/json.lua
+++ b/libs/json/luasrc/json.lua
@@ -205,11 +205,13 @@ function Encoder.parse_iter(self, obj)
local first = true
for key, entry in pairs(obj) do
- first = first or self:put(",")
- first = first and false
- self:parse_string(tostring(key))
- self:put(":")
- self:dispatch(entry)
+ if key ~= null then
+ first = first or self:put(",")
+ first = first and false
+ self:parse_string(tostring(key))
+ self:put(":")
+ self:dispatch(entry)
+ end
end
self:put("}")