Add deleteKey function to Javascript Agent (#1543)

* Add deleteKey function to Javascript Agent

* JSONifying return value of deleteKey
This commit is contained in:
Enfop 2016-06-16 08:30:33 +02:00 committed by Andrew Cantino
parent 47715c3349
commit 2295875d81
2 changed files with 41 additions and 0 deletions

View file

@ -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);
}

View file

@ -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 } }); };'