| @@ -21,6 +21,7 @@ module Agents | ||
| 21 | 21 | * `this.memory()` | 
| 22 | 22 | * `this.memory(key)` | 
| 23 | 23 | * `this.memory(keyToSet, valueToSet)` | 
| 24 | + * `this.setMemory(object)` (sets the memory to the values of the input object) | |
| 24 | 25 | * `this.deleteKey(key)` (deletes a key from memory and returns the value) | 
| 25 | 26 | * `this.credential(name)` | 
| 26 | 27 | * `this.credential(name, valueToSet)` | 
| @@ -115,9 +116,12 @@ module Agents | ||
| 115 | 116 |        context["doLog"] = lambda { |a, x| log x } | 
| 116 | 117 |        context["doError"] = lambda { |a, x| error x } | 
| 117 | 118 |        context["getMemory"] = lambda { |a| memory.to_json } | 
| 118 | - context["setMemory"] = lambda do |a, x, y| | |
| 119 | + context["setKey"] = lambda do |a, x, y| | |
| 119 | 120 | memory[x] = clean_nans(y) | 
| 120 | 121 | end | 
| 122 | + context["setMemory"] = lambda do |a, x| | |
| 123 | + memory.replace(clean_nans(x)) | |
| 124 | + end | |
| 121 | 125 |        context["deleteKey"] = lambda { |a, x| memory.delete(x).to_json } | 
| 122 | 126 |        context["escapeHtml"] = lambda { |a, x| CGI.escapeHTML(x) } | 
| 123 | 127 |        context["unescapeHtml"] = lambda { |a, x| CGI.unescapeHTML(x) } | 
| @@ -165,7 +169,7 @@ module Agents | ||
| 165 | 169 |  | 
| 166 | 170 |          Agent.memory = function(key, value) { | 
| 167 | 171 |            if (typeof(key) !== "undefined" && typeof(value) !== "undefined") { | 
| 168 | - setMemory(key, value); | |
| 172 | + setKey(key, value); | |
| 169 | 173 |            } else if (typeof(key) !== "undefined") { | 
| 170 | 174 | return JSON.parse(getMemory())[key]; | 
| 171 | 175 |            } else { | 
| @@ -173,6 +177,10 @@ module Agents | ||
| 173 | 177 | } | 
| 174 | 178 | } | 
| 175 | 179 |  | 
| 180 | +        Agent.setMemory = function(obj) { | |
| 181 | + setMemory(obj); | |
| 182 | + } | |
| 183 | + | |
| 176 | 184 |          Agent.credential = function(name, value) { | 
| 177 | 185 |            if (typeof(value) !== "undefined") { | 
| 178 | 186 | setCredential(name, value); | 
| @@ -212,6 +212,22 @@ describe Agents::JavaScriptAgent do | ||
| 212 | 212 | end | 
| 213 | 213 | end | 
| 214 | 214 |  | 
| 215 | + describe "setMemory" do | |
| 216 | + it "stores an object" do | |
| 217 | +        @agent.options['code'] = 'Agent.check = function() { | |
| 218 | +          var u = {}; | |
| 219 | + u["one"] = 1; | |
| 220 | + u["two"] = 2; | |
| 221 | + this.setMemory(u); | |
| 222 | + };' | |
| 223 | + @agent.save! | |
| 224 | + @agent.check | |
| 225 | +        expect(@agent.memory).to eq({ "one" => 1, "two" => 2 }) | |
| 226 | + @agent.save! | |
| 227 | +        expect { @agent.reload.memory }.not_to raise_error | |
| 228 | + end | |
| 229 | + end | |
| 230 | + | |
| 215 | 231 | describe "deleteKey" do | 
| 216 | 232 | it "deletes a memory key" do | 
| 217 | 233 |          @agent.memory = { foo: "baz" } |