scansion/objects/client.lua

changeset 16
59f176aa3465
parent 15
0441673df075
child 17
610917f3ea97
--- 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!")

mercurial