@@ -21,6 +21,7 @@ module Agents |
||
21 | 21 |
* `this.memory()` |
22 | 22 |
* `this.memory(key)` |
23 | 23 |
* `this.memory(keyToSet, valueToSet)` |
24 |
+ * `this.deleteKey(key)` (deletes a key from memory and returns the value) |
|
24 | 25 |
* `this.credential(name)` |
25 | 26 |
* `this.credential(name, valueToSet)` |
26 | 27 |
* `this.options()` |
@@ -120,6 +121,7 @@ module Agents |
||
120 | 121 |
memory.to_json |
121 | 122 |
end |
122 | 123 |
end |
124 |
+ context["deleteKey"] = lambda { |a, x| memory.delete(x).to_json } |
|
123 | 125 |
context["escapeHtml"] = lambda { |a, x| CGI.escapeHTML(x) } |
124 | 126 |
context["unescapeHtml"] = lambda { |a, x| CGI.unescapeHTML(x) } |
125 | 127 |
context['getCredential'] = lambda { |a, k| credential(k); } |
@@ -198,6 +200,10 @@ module Agents |
||
198 | 200 |
doError(message); |
199 | 201 |
} |
200 | 202 |
|
203 |
+ Agent.deleteKey = function(key) { |
|
204 |
+ return JSON.parse(deleteKey(key)); |
|
205 |
+ } |
|
206 |
+ |
|
201 | 207 |
Agent.escapeHtml = function(html) { |
202 | 208 |
return escapeHtml(html); |
203 | 209 |
} |
@@ -188,6 +188,41 @@ describe Agents::JavaScriptAgent do |
||
188 | 188 |
end |
189 | 189 |
end |
190 | 190 |
|
191 |
+ describe "deleteKey" do |
|
192 |
+ it "deletes a memory key" do |
|
193 |
+ @agent.memory = { foo: "baz" } |
|
194 |
+ @agent.options['code'] = 'Agent.check = function() { |
|
195 |
+ this.deleteKey("foo"); |
|
196 |
+ };' |
|
197 |
+ @agent.save! |
|
198 |
+ @agent.check |
|
199 |
+ expect(@agent.memory['foo']).to be_nil |
|
200 |
+ expect { @agent.reload.memory }.not_to raise_error |
|
201 |
+ end |
|
202 |
+ |
|
203 |
+ it "returns the string value of the deleted key" do |
|
204 |
+ @agent.memory = { foo: "baz" } |
|
205 |
+ @agent.options['code'] = 'Agent.check = function() { |
|
206 |
+ this.createEvent({ message: this.deleteKey("foo")}); |
|
207 |
+ };' |
|
208 |
+ @agent.save! |
|
209 |
+ @agent.check |
|
210 |
+ created_event = @agent.events.last |
|
211 |
+ expect(created_event.payload).to eq('message' => "baz") |
|
212 |
+ end |
|
213 |
+ |
|
214 |
+ it "returns the hash value of the deleted key" do |
|
215 |
+ @agent.memory = { foo: { baz: 'test' } } |
|
216 |
+ @agent.options['code'] = 'Agent.check = function() { |
|
217 |
+ this.createEvent({ message: this.deleteKey("foo")}); |
|
218 |
+ };' |
|
219 |
+ @agent.save! |
|
220 |
+ @agent.check |
|
221 |
+ created_event = @agent.events.last |
|
222 |
+ expect(created_event.payload).to eq('message' => { 'baz' => 'test' }) |
|
223 |
+ end |
|
224 |
+ end |
|
225 |
+ |
|
191 | 226 |
describe "creating events" do |
192 | 227 |
it "creates events with this.createEvent in the JavaScript environment" do |
193 | 228 |
@agent.options['code'] = 'Agent.check = function() { this.createEvent({ message: "This is an event!", stuff: { foo: 5 } }); };' |