Add deleteKey function to Javascript Agent (#1543)

* Add deleteKey function to Javascript Agent

* JSONifying return value of deleteKey

Enfop 8 years ago
parent
commit
2295875d81
2 changed files with 41 additions and 0 deletions
  1. 6 0
      app/models/agents/java_script_agent.rb
  2. 35 0
      spec/models/agents/java_script_agent_spec.rb

+ 6 - 0
app/models/agents/java_script_agent.rb

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

+ 35 - 0
spec/models/agents/java_script_agent_spec.rb

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