# HG changeset patch # User Matthew Wild # Date 1441632813 -3600 # Node ID 59f176aa34656da70f359ed91d2b7c32f444ed71 # Parent 0441673df07546e53cf5b22fcce977dd5a65c044 client: Allow simple variable substitution in XML in scripts diff -r 0441673df075 -r 59f176aa3465 scansion/objects/client.lua --- 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!")