From 2295875d81dc56271e186f8005e012b26962da6d Mon Sep 17 00:00:00 2001 From: Enfop Date: Thu, 16 Jun 2016 08:30:33 +0200 Subject: [PATCH] Add deleteKey function to Javascript Agent (#1543) * Add deleteKey function to Javascript Agent * JSONifying return value of deleteKey --- app/models/agents/java_script_agent.rb | 6 ++++ spec/models/agents/java_script_agent_spec.rb | 35 ++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/app/models/agents/java_script_agent.rb b/app/models/agents/java_script_agent.rb index 63fc2896..07fd2213 100644 --- a/app/models/agents/java_script_agent.rb +++ b/app/models/agents/java_script_agent.rb @@ -21,6 +21,7 @@ module Agents * `this.memory()` * `this.memory(key)` * `this.memory(keyToSet, valueToSet)` + * `this.deleteKey(key)` (deletes a key from memory and returns the value) * `this.credential(name)` * `this.credential(name, valueToSet)` * `this.options()` @@ -120,6 +121,7 @@ module Agents memory.to_json end end + context["deleteKey"] = lambda { |a, x| memory.delete(x).to_json } context["escapeHtml"] = lambda { |a, x| CGI.escapeHTML(x) } context["unescapeHtml"] = lambda { |a, x| CGI.unescapeHTML(x) } context['getCredential'] = lambda { |a, k| credential(k); } @@ -198,6 +200,10 @@ module Agents doError(message); } + Agent.deleteKey = function(key) { + return JSON.parse(deleteKey(key)); + } + Agent.escapeHtml = function(html) { return escapeHtml(html); } diff --git a/spec/models/agents/java_script_agent_spec.rb b/spec/models/agents/java_script_agent_spec.rb index afc3305b..c39afae3 100644 --- a/spec/models/agents/java_script_agent_spec.rb +++ b/spec/models/agents/java_script_agent_spec.rb @@ -188,6 +188,41 @@ describe Agents::JavaScriptAgent do end end + describe "deleteKey" do + it "deletes a memory key" do + @agent.memory = { foo: "baz" } + @agent.options['code'] = 'Agent.check = function() { + this.deleteKey("foo"); + };' + @agent.save! + @agent.check + expect(@agent.memory['foo']).to be_nil + expect { @agent.reload.memory }.not_to raise_error + end + + it "returns the string value of the deleted key" do + @agent.memory = { foo: "baz" } + @agent.options['code'] = 'Agent.check = function() { + this.createEvent({ message: this.deleteKey("foo")}); + };' + @agent.save! + @agent.check + created_event = @agent.events.last + expect(created_event.payload).to eq('message' => "baz") + end + + it "returns the hash value of the deleted key" do + @agent.memory = { foo: { baz: 'test' } } + @agent.options['code'] = 'Agent.check = function() { + this.createEvent({ message: this.deleteKey("foo")}); + };' + @agent.save! + @agent.check + created_event = @agent.events.last + expect(created_event.payload).to eq('message' => { 'baz' => 'test' }) + end + end + describe "creating events" do it "creates events with this.createEvent in the JavaScript environment" do @agent.options['code'] = 'Agent.check = function() { this.createEvent({ message: "This is an event!", stuff: { foo: 5 } }); };'