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 +4 -4
- data/app/kern/services/vm.rb +18 -0
- data/docs/services/vm.md +3 -1
- data/lib/flok/version.rb +1 -1
- data/spec/kern/vm_service_functional_spec.rb +52 -0
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 723b7ee6d523973fb556dd8a17fd5f83affcdf2b
|
4
|
+
data.tar.gz: ffa8588b4d24dc0ddbb6f4175123cac51321d4bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3f80f965f0d08132aa33504a9cab237e0ddab6939051d7fb8a66ed74144c6613286d7e372adba90d8066b3e44ecd1128fbae10615edc3fcd1b7237382b399d06
|
7
|
+
data.tar.gz: c387613fb58f47c1f5addb74c37eabf58377ba50e598c75bf18260972968e0938b0656c0a2dc3fc042d6d7a2f0ba6a0644c48c5c8803e4c568a6534c9cc6cfef
|
data/app/kern/services/vm.rb
CHANGED
@@ -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
|
-
|
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
@@ -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 %{
|