Browse Source

Merge pull request #1576 from Enfop/JavascriptAgentSetMemory

Add setMemory function to Javascript Agent
Dominik Sander 8 years ago
parent
commit
d741bfdc5c

+ 10 - 2
app/models/agents/java_script_agent.rb

@@ -21,6 +21,7 @@ module Agents
       * `this.memory()`
       * `this.memory(key)`
       * `this.memory(keyToSet, valueToSet)`
+      * `this.setMemory(object)` (replaces the Agent's memory with the provided object)
       * `this.deleteKey(key)` (deletes a key from memory and returns the value)
       * `this.credential(name)`
       * `this.credential(name, valueToSet)`
@@ -115,9 +116,12 @@ module Agents
       context["doLog"] = lambda { |a, x| log x }
       context["doError"] = lambda { |a, x| error x }
       context["getMemory"] = lambda { |a| memory.to_json }
-      context["setMemory"] = lambda do |a, x, y|
+      context["setMemoryKey"] = lambda do |a, x, y|
         memory[x] = clean_nans(y)
       end
+      context["setMemory"] = lambda do |a, x|
+        memory.replace(clean_nans(x))
+      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) }
@@ -165,7 +169,7 @@ module Agents
 
         Agent.memory = function(key, value) {
           if (typeof(key) !== "undefined" && typeof(value) !== "undefined") {
-            setMemory(key, value);
+            setMemoryKey(key, value);
           } else if (typeof(key) !== "undefined") {
             return JSON.parse(getMemory())[key];
           } else {
@@ -173,6 +177,10 @@ module Agents
           }
         }
 
+        Agent.setMemory = function(obj) {
+          setMemory(obj);
+        }
+
         Agent.credential = function(name, value) {
           if (typeof(value) !== "undefined") {
             setCredential(name, value);

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

@@ -212,6 +212,22 @@ describe Agents::JavaScriptAgent do
       end
     end
 
+    describe "setMemory" do
+      it "stores an object" do
+        @agent.options['code'] = 'Agent.check = function() {
+          var u = {};
+          u["one"] = 1;
+          u["two"] = 2;
+          this.setMemory(u);
+          };'
+        @agent.save!
+        @agent.check
+        expect(@agent.memory).to eq({ "one" => 1, "two" => 2 })
+        @agent.save!
+        expect { @agent.reload.memory }.not_to raise_error
+      end
+    end
+
     describe "deleteKey" do
       it "deletes a memory key" do
         @agent.memory = { foo: "baz" }