z4db 0.0.0 → 0.0.2
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/z4db/version.rb +1 -1
- data/lib/z4db.rb +50 -27
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7b1e0e7ec2f3ad482785ca8e89aeeaddda66236fae9c502f67befa2620a95333
|
4
|
+
data.tar.gz: d0f7542565c5cde7a7a65bb77582c2fa54ae64630bfd7c1db0969ba62609887b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1675fc03143d446230ac7c2f6b4c2bdb5513126193349bb02107031d516ef9faa72c7479e11ced81e24ebe7ea5a2fc1b550fa3c58237c72f854fa36fef480477
|
7
|
+
data.tar.gz: c7d586a9d4649eba2df977a23a8e1c362d18e575843906f0017ccbf7e25d292cae9727e02ea788ef7731bebc98e38d19512c7b3ee9fd8635e2e4b2e83aac5c91
|
data/lib/z4db/version.rb
CHANGED
data/lib/z4db.rb
CHANGED
@@ -2,9 +2,15 @@
|
|
2
2
|
|
3
3
|
require 'pstore'
|
4
4
|
|
5
|
+
require 'z4blockchain'
|
6
|
+
|
5
7
|
require_relative "z4db/version"
|
6
8
|
|
7
|
-
|
9
|
+
if !Dir.exist? "db"
|
10
|
+
Dir.mkdir "db"
|
11
|
+
end
|
12
|
+
|
13
|
+
module Z4DB
|
8
14
|
class Error < StandardError; end
|
9
15
|
class DB
|
10
16
|
def initialize(*k);
|
@@ -17,17 +23,30 @@ module Z4db
|
|
17
23
|
@cal = PStore.new(%[db/#{@id}.events.pstore])
|
18
24
|
@sub = {}
|
19
25
|
@current = %[]
|
26
|
+
@bank = Z4BC[@id]
|
20
27
|
puts %[DB: #{@id}]
|
21
28
|
end
|
22
|
-
|
29
|
+
|
30
|
+
##
|
31
|
+
# blockchain backed transaction store
|
32
|
+
def bank
|
33
|
+
@bank
|
34
|
+
end
|
35
|
+
##
|
36
|
+
# the database key
|
23
37
|
def id; @id; end;
|
38
|
+
##
|
39
|
+
# the database object type
|
24
40
|
def type; @type; end;
|
41
|
+
##
|
42
|
+
# the index of object type
|
25
43
|
def index; @index; end
|
26
|
-
|
44
|
+
|
45
|
+
##
|
27
46
|
# incr / decr by :num
|
28
47
|
def tick(k,h={num: 1}); @db.transaction { |db| x = db[k.to_sym].to_i; db[k.to_sym] = x + h[:num] }; end
|
29
|
-
|
30
|
-
# push i to list
|
48
|
+
##
|
49
|
+
# push i to list and ensure uniqueness
|
31
50
|
def add(l,i,*u);
|
32
51
|
@db.transaction {|db|
|
33
52
|
db[l] ||= [];
|
@@ -37,12 +56,14 @@ module Z4db
|
|
37
56
|
end
|
38
57
|
};
|
39
58
|
end
|
40
|
-
|
59
|
+
##
|
60
|
+
# access subtable
|
41
61
|
def sub(k)
|
42
62
|
add(:subs, k, :uniq)
|
43
|
-
|
63
|
+
Z4DB[@id, k]
|
44
64
|
end
|
45
65
|
|
66
|
+
#
|
46
67
|
# remind "date time string in some fashion.", "event info"...
|
47
68
|
def remind k, *a
|
48
69
|
kk = Z4.datetime(k).strftime('%Y/%m/%d AT %H:%M');
|
@@ -52,7 +73,8 @@ module Z4db
|
|
52
73
|
File.open("reminders/#{@id}.rem", 'w') {|f| f.write(o.join("\n") + %[\n]); }
|
53
74
|
return o.length
|
54
75
|
end
|
55
|
-
|
76
|
+
##
|
77
|
+
# add log entry
|
56
78
|
def log *a
|
57
79
|
kk = Time.now.strftime('%Y/%m/%d AT %H:%M');
|
58
80
|
v = a.join(" ")
|
@@ -61,14 +83,16 @@ module Z4db
|
|
61
83
|
File.open("reminders/#{@id}.rem", 'w') {|f| f.write(o.join("\n") + %[\n]); }
|
62
84
|
return o.length
|
63
85
|
end
|
64
|
-
|
86
|
+
##
|
87
|
+
# remove reminder
|
65
88
|
def forget k
|
66
89
|
kk = Z4.datetime(k).strftime('%Y/%m/%d AT %H:%m ');
|
67
90
|
o = []
|
68
91
|
@cal.transaction { |db| db.delete(kk); db.keys.each { |e| o << %[REM #{e} MSG #{db[e]}] } }
|
69
92
|
File.open("reminders/#{@id}.rem", 'w') {|f| f.write(o.join("\n") + %[\n]); }
|
70
93
|
end
|
71
|
-
|
94
|
+
##
|
95
|
+
# pull agenda from reminders
|
72
96
|
def agenda
|
73
97
|
o = []
|
74
98
|
`remind -s reminders/#{@id}.rem`.chomp.gsub(' *', '').split("\n").each { |e|
|
@@ -79,20 +103,29 @@ module Z4db
|
|
79
103
|
return o
|
80
104
|
end
|
81
105
|
|
106
|
+
##
|
107
|
+
# generate plaintext calendar
|
82
108
|
def calendar
|
83
109
|
`remind -c reminders/#{@id}.rem`.chomp.gsub("\f","").split("\n")
|
84
110
|
end
|
85
|
-
|
111
|
+
|
112
|
+
##
|
113
|
+
# define or execute db events
|
86
114
|
def on(k, h={}, &b); if block_given?; @ev[k] = b; else; @db.transaction { |db| @ev[k.to_sym].call(db, h) }; end; end
|
87
|
-
|
115
|
+
##
|
116
|
+
# key getter
|
88
117
|
def [](k); @db.transaction { |db| db[k] }; end
|
89
|
-
|
118
|
+
##
|
119
|
+
# key setter
|
90
120
|
def []=(k,v); @db.transaction { |db| db[k]=v }; end
|
121
|
+
##
|
91
122
|
# transaction wrapper
|
92
123
|
def transaction(&b); @db.transaction { |db| b.call(db) }; end
|
124
|
+
##
|
93
125
|
# defined keys
|
94
126
|
def keys; @db.transaction { |db| db.keys }; end
|
95
|
-
|
127
|
+
##
|
128
|
+
# db object to hash
|
96
129
|
def to_h;
|
97
130
|
h= {};
|
98
131
|
@db.transaction { |db| db.keys.each { |e| h[e] = db[e]; } };
|
@@ -100,22 +133,12 @@ module Z4db
|
|
100
133
|
end
|
101
134
|
private
|
102
135
|
# get remote object from local.
|
103
|
-
def get(k);
|
136
|
+
def get(k); Z4DB[k, to_h[k]]; end
|
104
137
|
end
|
138
|
+
##
|
139
|
+
# access db object
|
105
140
|
def self.[] *k
|
106
141
|
DB.new(k)
|
107
142
|
end
|
108
143
|
end
|
109
144
|
|
110
|
-
if !Dir.exist? "db"
|
111
|
-
Dir.mkdir "db"
|
112
|
-
puts "[+][z4db][#####] created 'db' directory."
|
113
|
-
puts " | [z4db][objects] @user = Z4db[:user, 'wxyz'];"
|
114
|
-
puts " | [z4db][sub-objects] @inventory = @user.sub(:inventory);"
|
115
|
-
puts " | [z4db][set] @user[:key] = 'value.';"
|
116
|
-
puts " | [z4db][get] k = @user[:key]; => { key: 'value.' }"
|
117
|
-
puts ' | [z4db][events][create] @user.on(:zap) { |db, h| tick(:zaps); puts %[ZAP: #{h}] }'
|
118
|
-
puts ' | [z4db][events][trigger] @user.on(:zap, from: "abcd");'
|
119
|
-
puts " | [z4db][object] h = @user.to_h;"
|
120
|
-
puts "[+][z4db][#####] https://github.com/xorgnak/z4db"
|
121
|
-
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: z4db
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Erik Olson
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-12-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pstore
|