skjvs 0.0.0 → 0.0.1
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/skjvs/one_file.rb +38 -0
- data/skjvs.gemspec +2 -2
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9159f1c43952fc4b790c5bce807b6d1651d018472eeb8371572ac95ea784209c
|
|
4
|
+
data.tar.gz: f04c18daa17700508c8dd7dcba3b4d6c22c3d6ac6489e0b815f59afb73ba2769
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3465e04364f4f1989159d12479c3e73980195784afde26c0fa3fb364d30df886aaac6d59217d6f6a7a74abceb0c01726a80bfd006aa5b7ac440e8817a30a2414
|
|
7
|
+
data.tar.gz: 82206779bbbad15fa185357e0b371ba462c51467264716986f3345ad0c6789bc883171d534723e539a1d9ecb831711674ef1b92a8387c1c60a9425680f71c615
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module SKJVS
|
|
2
|
+
class OneFile
|
|
3
|
+
require "json"
|
|
4
|
+
require "digest"
|
|
5
|
+
DEFAULT_FILENAME = "skjvs_store.txt"
|
|
6
|
+
|
|
7
|
+
def initialize path = DEFAULT_FILENAME
|
|
8
|
+
@path = path
|
|
9
|
+
@cache = {}
|
|
10
|
+
@pos = 0
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def [] key
|
|
14
|
+
::File.open @path, "r" do |file|
|
|
15
|
+
file.flock ::File::LOCK_SH
|
|
16
|
+
|
|
17
|
+
# TODO: do not parse values until EOF is reached
|
|
18
|
+
file.seek @pos
|
|
19
|
+
while line = file.gets
|
|
20
|
+
next if line.start_with? " "
|
|
21
|
+
@cache[line[0, 32].freeze] = ::JSON.parse line[33..-2]
|
|
22
|
+
end
|
|
23
|
+
@pos = file.pos
|
|
24
|
+
|
|
25
|
+
end if ::File.size(@path) > @pos if ::File.exist?(@path)
|
|
26
|
+
@cache[::Digest::MD5.hexdigest key.to_s]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def []= key, value
|
|
30
|
+
::File.open @path, "a" do |file|
|
|
31
|
+
file.flock ::File::LOCK_EX
|
|
32
|
+
file.puts "#{::Digest::MD5.hexdigest key.to_s} #{::JSON.generate value}"
|
|
33
|
+
file.flush
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
data/skjvs.gemspec
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Gem::Specification.new do |spec|
|
|
2
2
|
spec.name = "skjvs"
|
|
3
|
-
spec.version = "0.0.
|
|
3
|
+
spec.version = "0.0.1"
|
|
4
4
|
spec.summary = "string key json value storage"
|
|
5
5
|
|
|
6
6
|
spec.author = "Victor Maslov aka Nakilon"
|
|
@@ -8,5 +8,5 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.license = "MIT"
|
|
9
9
|
spec.metadata = {"source_code_uri" => "https://github.com/nakilon/skjvs"}
|
|
10
10
|
|
|
11
|
-
spec.files = %w{ LICENSE skjvs.gemspec lib/skjvs.rb }
|
|
11
|
+
spec.files = %w{ LICENSE skjvs.gemspec lib/skjvs.rb lib/skjvs/one_file.rb }
|
|
12
12
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: skjvs
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Victor Maslov aka Nakilon
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-07-09 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description:
|
|
14
14
|
email: nakilon@gmail.com
|
|
@@ -18,6 +18,7 @@ extra_rdoc_files: []
|
|
|
18
18
|
files:
|
|
19
19
|
- LICENSE
|
|
20
20
|
- lib/skjvs.rb
|
|
21
|
+
- lib/skjvs/one_file.rb
|
|
21
22
|
- skjvs.gemspec
|
|
22
23
|
homepage:
|
|
23
24
|
licenses:
|