flok 0.0.95 → 0.0.96

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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