flok 0.0.95 → 0.0.96

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1f42ffe41437733572bf53f5f8e98a52b099ddd5
4
- data.tar.gz: 51e6e0dcb4bce07f7f5216658bd78257714ce173
3
+ metadata.gz: 723b7ee6d523973fb556dd8a17fd5f83affcdf2b
4
+ data.tar.gz: ffa8588b4d24dc0ddbb6f4175123cac51321d4bb
5
5
  SHA512:
6
- metadata.gz: c1b7320923d3b0286d1b5fc08c8a5b1907506693032901c67b6be1f43209a09240bff287cd3b20720ee70030c972b8d1a707b527a13c69384297294e32121307
7
- data.tar.gz: b5da37b43f298dd5d87f16232c2e05b52c9d4c4cb670d3de37b7bd7da91131c3c05bdbe03ea89c4ebb8d1e946934638041d3205e90658465a5f219d5194ac679
6
+ metadata.gz: 3f80f965f0d08132aa33504a9cab237e0ddab6939051d7fb8a66ed74144c6613286d7e372adba90d8066b3e44ecd1128fbae10615edc3fcd1b7237382b399d06
7
+ data.tar.gz: c387613fb58f47c1f5addb74c37eabf58377ba50e598c75bf18260972968e0938b0656c0a2dc3fc042d6d7a2f0ba6a0644c48c5c8803e4c568a6534c9cc6cfef
@@ -265,6 +265,24 @@ service :vm do
265
265
  }
266
266
  vm_reindex_page(page);
267
267
  }
268
+
269
+ function vm_set_entry_with_id_key_val(page, eid, key, val) {
270
+ var _idx = page.__index[eid];
271
+
272
+ //Do we have the entry?
273
+ if (_idx > -1) {
274
+ //Great, then set the id and _sig
275
+ page.entries[_idx][key] = val;
276
+ page.entries[_idx]._sig = gen_id();
277
+ } else {
278
+ //Nope, create the entry
279
+ var entry = {_sig: gen_id(), _id: eid}
280
+ entry[key] = val;
281
+ page.entries.push(entry);
282
+ vm_reindex_page(page);
283
+ }
284
+ }
285
+
268
286
  ///////////////////////////////////////////////////////////////////////////
269
287
 
270
288
  //vm_diff helpers
data/docs/services/vm.md CHANGED
@@ -198,6 +198,8 @@ The pager synchronization daemon is embodied in the function called `vm_pg_sync_
198
198
  a reference if the entry if it is found. The reference is **not** modifiable unless you call `vm_copy_page` first. Additionally, entries you
199
199
  added recently will not be available by this untli they are written to disk via `vm_cache_write`
200
200
  * `vm_del_entry_with_id(page, entry_id)` - Removes the entry from the page. If entry_id doesn't exist, nothing happends.
201
+ * `vm_set_entry_with_id_key_val(page, key, entry_id, value)` - Set a particular key of an entry. This will also change the entries `_sig` field to
202
+ a new random signature. If an entry with the id does not exist, it will be created.
201
203
  * `vm_rehash_page(page)` - Calculates the hash for a page and modifies that page with the new `_hash` field. If the `_hash` field does not exist, it
202
204
  will create it. Multiple calls are supported as it will recalculate the index as needed.
203
205
  * `vm_reindex_page(page)` - Recalculates the `__index` field of the page. If `__index` does not exist, it is added.
@@ -226,7 +228,7 @@ The pager synchronization daemon is embodied in the function called `vm_pg_sync_
226
228
  `__changes_id` of the page matches `changes_id`. If the page is based (implying the base page has changes and the page has changes as all base
227
229
  pages have changes), then if the `changes_id` matches the **base** `__changes_id` , the `__base` is removed from the page. If `changes_id`
228
230
  does not match in either of the cases, then nothing happends. This may happend if a synchronization errousouly comes in.
229
- * **Why do we have both `vm_rebase` and `vm_mark_changes_synced`?**
231
+ * **Why do we have both `vm_rebase` and `vm_mark_changes_synced`?**
230
232
  * They are used under similar circumstances. You always `vm_mark_changes_synced` before calling `vm_rebase` on a page. The reasoning is that
231
233
  `vm_rebase` will assume that the cached page does not contain changes if they are present in `older`. If you didn't do this, then the
232
234
  cached page would be rebased and could contain changes even though it's already been rebased on an older page. E.g. `newer[changes, nobase]`
data/lib/flok/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flok
2
- VERSION = "0.0.95"
2
+ VERSION = "0.0.96"
3
3
  end
@@ -104,6 +104,58 @@ RSpec.describe "kern:vm_service_functional" do
104
104
  ])
105
105
  end
106
106
 
107
+ it "Can can use vm_set_entry_with_id_key_val" do
108
+ ctx = flok_new_user File.read('./spec/kern/assets/vm/controller0.rb'), File.read("./spec/kern/assets/vm/config5.rb")
109
+ dump = ctx.evald %{
110
+ dump.new_page = vm_create_page("my_id")
111
+ dump.new_page.entries.push({
112
+ _sig: "test",
113
+ _id: "test",
114
+ value: "test",
115
+ });
116
+ dump.new_page.entries.push({
117
+ _sig: "test2",
118
+ _id: "test2",
119
+ value: "test2",
120
+ });
121
+ dump.new_page.entries.push({
122
+ _sig: "test3",
123
+ _id: "test3",
124
+ value: "test3",
125
+ });
126
+ dump.new_page.entries.push({
127
+ _sig: "test4",
128
+ _id: "test4",
129
+ value: "test4",
130
+ });
131
+
132
+ vm_reindex_page(dump.new_page);
133
+ vm_rehash_page(dump.new_page);
134
+
135
+ vm_set_entry_with_id_key_val(dump.new_page, "test3", "value", "foo");
136
+ vm_set_entry_with_id_key_val(dump.new_page, "test3", "value2", "foo2");
137
+
138
+ //Also test some ids that do not currently exist
139
+ vm_set_entry_with_id_key_val(dump.new_page, "test5", "foo", "bar");
140
+ vm_set_entry_with_id_key_val(dump.new_page, "test5", "foo2", "bar2");
141
+ }
142
+
143
+ expect(dump["new_page"]["entries"][0]).to eq("_sig" => "test", "_id" => "test", "value" => "test")
144
+ expect(dump["new_page"]["entries"][1]).to eq("_sig" => "test2", "_id" => "test2", "value" => "test2")
145
+
146
+ expect(dump["new_page"]["entries"][2]["_id"]).to eq("test3")
147
+ expect(dump["new_page"]["entries"][2]["_sig"]).not_to eq(nil)
148
+ expect(dump["new_page"]["entries"][2]["value"]).to eq("foo")
149
+ expect(dump["new_page"]["entries"][2]["value2"]).to eq("foo2")
150
+
151
+ expect(dump["new_page"]["entries"][3]).to eq("_sig" => "test4", "_id" => "test4", "value" => "test4")
152
+
153
+ expect(dump["new_page"]["entries"][4]["_id"]).to eq("test5")
154
+ expect(dump["new_page"]["entries"][4]["_sig"]).not_to eq(nil)
155
+ expect(dump["new_page"]["entries"][4]["foo"]).to eq("bar")
156
+ expect(dump["new_page"]["entries"][4]["foo2"]).to eq("bar2")
157
+ end
158
+
107
159
  it "Can can use vm_copy_page" do
108
160
  ctx = flok_new_user File.read('./spec/kern/assets/vm/controller0.rb'), File.read("./spec/kern/assets/vm/config5.rb")
109
161
  dump = ctx.evald %{
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flok
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.95
4
+ version: 0.0.96
5
5
  platform: ruby
6
6
  authors:
7
7
  - seo