gemmyrb 0.1.2 → 0.1.3
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/lib/gemmy/components/cache.rb +15 -1
- data/lib/gemmy/patches/hash_patch.rb +37 -0
- data/lib/gemmy/patches/string_patch.rb +6 -0
- data/lib/gemmy/version.rb +1 -1
- 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: b2d90fcdf579db68f27ca1757ff19a799fcfc922
|
4
|
+
data.tar.gz: dec4516b981738b2494a9886227c22ebb1de168d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2492d8942963c75d93fac869831113119249a3eb4718c4aaf495acddacb6655a7844072362c36a56043e556f488a38477bd3907f58012c03baee62dbb341703c
|
7
|
+
data.tar.gz: 17f0dee57643eaa6f3ce8df6fdad7e271eb8a8232b358316bdfffb2b397ce03ffaed083549e769e8d0971dd2836d572946c4b09b53816e35a624df175af7f73b
|
@@ -16,7 +16,8 @@ class Gemmy::Components::Cache < Hash
|
|
16
16
|
def initialize(db_name, hash={})
|
17
17
|
cache_path = self.class.setup_cache_folder
|
18
18
|
@db = hash.persisted "#{cache_path}/#{db_name}.yaml"
|
19
|
-
|
19
|
+
# copy db state into memory
|
20
|
+
@db.data.each { |k,v| self[k] = v.deep_dup }
|
20
21
|
end
|
21
22
|
|
22
23
|
def get_or_set(*keys, &blk)
|
@@ -40,6 +41,19 @@ class Gemmy::Components::Cache < Hash
|
|
40
41
|
@db.dig *keys
|
41
42
|
end
|
42
43
|
|
44
|
+
# Delete functions like "dig_delete"
|
45
|
+
# I.e. if given a few keys as arguments, it will treat only the last as
|
46
|
+
# a delete key and all the rest as dig keys.
|
47
|
+
def dig_delete(*keys)
|
48
|
+
@db.dig_delete *keys
|
49
|
+
key_to_delete = keys.pop
|
50
|
+
if keys.empty?
|
51
|
+
self.delete key_to_delete
|
52
|
+
else
|
53
|
+
self.dig(*keys).delete key_to_delete
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
43
57
|
def set_state(hash)
|
44
58
|
@db.set_state hash
|
45
59
|
each_key &m(:delete)
|
@@ -17,6 +17,18 @@ module Gemmy::Patches::HashPatch
|
|
17
17
|
|
18
18
|
module InstanceMethods
|
19
19
|
|
20
|
+
module Indifferent
|
21
|
+
def indifferent
|
22
|
+
self.with_indifferent_access
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
module Easy
|
27
|
+
def easy
|
28
|
+
self.with_indifferent_access
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
20
32
|
module UpdateKeys
|
21
33
|
# facets
|
22
34
|
# in place
|
@@ -297,11 +309,13 @@ module Gemmy::Patches::HashPatch
|
|
297
309
|
#
|
298
310
|
|
299
311
|
module Persisted
|
312
|
+
|
300
313
|
def persisted(path)
|
301
314
|
require 'yaml/store'
|
302
315
|
autovivified = Gemmy.patch("hash/i/autovivified")\
|
303
316
|
.method(:_autovivified)
|
304
317
|
autovivified.call(self).tap do |hash|
|
318
|
+
# load data from YAML into memory
|
305
319
|
hash.instance_exec do
|
306
320
|
@store = YAML::Store.new path
|
307
321
|
@store.transaction do
|
@@ -312,9 +326,11 @@ module Gemmy::Patches::HashPatch
|
|
312
326
|
hash.extend Gemmy::Patches::HashPatch::PersistedHash
|
313
327
|
end
|
314
328
|
end
|
329
|
+
|
315
330
|
def db
|
316
331
|
@store
|
317
332
|
end
|
333
|
+
|
318
334
|
end
|
319
335
|
|
320
336
|
end # end instance methods
|
@@ -322,9 +338,11 @@ module Gemmy::Patches::HashPatch
|
|
322
338
|
# Helper methods for the persistence patch
|
323
339
|
#
|
324
340
|
module PersistedHash
|
341
|
+
|
325
342
|
def get(*keys, disk: true)
|
326
343
|
disk ? @store.transaction { @store[:data].dig(*keys) } : dig(*keys)
|
327
344
|
end
|
345
|
+
|
328
346
|
def set(*keys, val)
|
329
347
|
bury = Gemmy::Patches::HashPatch::InstanceMethods::Bury.method(:bury)
|
330
348
|
bury.call(self, *keys, val)
|
@@ -333,10 +351,29 @@ module Gemmy::Patches::HashPatch
|
|
333
351
|
end
|
334
352
|
val
|
335
353
|
end
|
354
|
+
|
336
355
|
def data
|
337
356
|
@store.transaction { @store[:data] }
|
338
357
|
end
|
339
358
|
|
359
|
+
# Delete functions like "dig_delete"
|
360
|
+
# I.e. if given a few keys as arguments, it will treat only the last as
|
361
|
+
# a delete key and all the rest as dig keys.
|
362
|
+
def dig_delete(*keys)
|
363
|
+
key_to_delete = keys.pop
|
364
|
+
if keys.empty?
|
365
|
+
delete key_to_delete
|
366
|
+
@store.transaction do
|
367
|
+
@store[:data].delete key_to_delete
|
368
|
+
end
|
369
|
+
else
|
370
|
+
dig(*keys).delete key_to_delete
|
371
|
+
@store.transaction do
|
372
|
+
@store[:data].dig(*keys).delete key_to_delete
|
373
|
+
end
|
374
|
+
end
|
375
|
+
end
|
376
|
+
|
340
377
|
# This won't autovivify the hash automatically
|
341
378
|
def set_state(hash)
|
342
379
|
@store.transaction { @store[:data] = hash }
|
@@ -7,6 +7,12 @@ module Gemmy::Patches::StringPatch
|
|
7
7
|
|
8
8
|
module InstanceMethods
|
9
9
|
|
10
|
+
module Unchomp
|
11
|
+
def unchomp
|
12
|
+
self.ends_with?("\n") ? self : "#{self}\n"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
10
16
|
module SyllableCount
|
11
17
|
def syllable_count
|
12
18
|
Odyssey.flesch_kincaid_re(self, true)["syllable_count"]
|
data/lib/gemmy/version.rb
CHANGED