Dokumentation för denna modul finns på /dok (redigera), /test


Syfte redigera

Detekterar icke-uppskattade parametrar skickade till mallar, både anonyma/numrerade och namngivna. Kan anropas enbart från moduler, inte direkt från mallar.

Parametrar redigera

Två table tabeller:

  • innehållande parametrar inkommande till mallen, till exempel rakt kopierad från frame:getParent().args
  • lista över parametrar tillåtna för mallen, till exempel {[0]=2,"temperatur","tryck","nocat"}, heltal i elementet 0 definierar maximalt antal anonyma parametrar

Resultat redigera

Alltid string sträng:

  • tom betyder OK
  • icke-tom betyder fel, listar upptäckta oönskade parametrar, till exempel parametrar "hastighet=" och 3 (anonym), begränsat till maximalt 3 stycken, kan och ska användas för att generera ett produktivt felmeddelande
-- check for unallowed parameters, returns string, empty if OK

-- NOT usable directly from templates

local exporttbl = {}

local function contains (tbl, val)
  for l,w in ipairs(tbl) do
    if w == val then
      return true
    end
  end--for
  return false
end--function

function exporttbl.go (tbl_incoming, tbl_permitted)

  local complaint = ""
  local numbered_parameters = 0
  local unallowed_parameters = 0

  local function problem (guilty_value) -- uses upvalues
    if (unallowed_parameters<3) then
      if type(guilty_value)=="number" then
        guilty_value = tostring(guilty_value) .. ' (anonym)'
      else
        guilty_value = '"' .. guilty_value .. '="'
      end--if
      if (unallowed_parameters~=0) then
        complaint = complaint .. ' och '
      end--if
      complaint = complaint .. guilty_value
      unallowed_parameters = unallowed_parameters + 1
    end--if
  end--function

  numbered_parameters = tbl_permitted[0] -- ZERO value permitted
  tbl_permitted[0] = nil

  for k,v in pairs(tbl_incoming) do
    if type(k)=="number" then
      if k > numbered_parameters then
        problem (k)
      end
    else
      if not contains(tbl_permitted, k) then
        problem (k)
      end
    end--if
  end--for

  if (unallowed_parameters==1) then
    complaint = "parameter " .. complaint
  end--if
  if (unallowed_parameters>=2) then
    complaint = "parametrar " .. complaint
  end--if

  return complaint

end--function

return exporttbl