Mon, 07 Sep 2015 14:33:33 +0100
client: Allow simple variable substitution in XML in scripts
scansion/objects/client.lua | file | annotate | diff | comparison | revisions |
--- a/scansion/objects/client.lua Mon Sep 07 14:33:09 2015 +0100 +++ b/scansion/objects/client.lua Mon Sep 07 14:33:33 2015 +0100 @@ -9,6 +9,24 @@ local stanzacmp = require "scansion.stanzacmp"; +local function fill_vars(script, stanza) + for k, v in pairs(stanza.attr) do + print("attr", k) + local expr = v:match("^%$%{(.+)%}$"); + if expr then + local name, value_name = expr:match("^(.-)'s (.+)$"); + assert(name, "Unable to parse expression: "..expr); + print("BBB") + local key = value_name:lower():gsub(" ", "_"); + assert(script.objects[name], "Unknown object called "..name); + local value = script.objects[name][key]; + assert(value ~= nil, "Unknown attribute (of "..name.."): "..value_name); + stanza.attr[k] = value; + end + end + return stanza; +end + return { _validate = function (client) assert(client.jid, "No JID specified"); @@ -31,12 +49,12 @@ end; sends = function (client, data) - local stanza = parse_xml(table.concat(data)); + local stanza = fill_vars(client.script, parse_xml(table.concat(data))); client.stream:send(stanza); end; receives = function (client, data) - local expected_stanza = parse_xml(table.concat(data)); + local expected_stanza = fill_vars(client.script, parse_xml(table.concat(data))); local function stanza_handler(received_stanza) if not stanzacmp.stanzas_match(expected_stanza, received_stanza) then print("NOT IT!")