z4db 0.0.0 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/z4db/version.rb +1 -1
- data/lib/z4db.rb +50 -27
- data/z4db.gemspec +1 -0
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb90f3f1651804c41d11841908b5d25a611a6b537dec548f256141c464dc53ae
|
4
|
+
data.tar.gz: 986ff0fa9d0b2de22c0d55bdf2b1da48a04f601c5576370f30272401f8d9bb01
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 91935eacd58e921f9d5fd2ccf51bc99e11ec154665969b30fb6b91aa975ba2ecd96f0c841f5465b9c8d31dcece4670797461c9079b5b3def200c69e51ee028ee
|
7
|
+
data.tar.gz: 0f3399afd99a866e9ee65094cec2c02bdb3aa4b7d9ad8c424e0ff4da9b8a9741bd549a8e4a11407234fd96cb9c7f38b7f977222716fd28c59aae19786e028f62
|
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
|
data/z4db.gemspec
CHANGED
@@ -31,6 +31,7 @@ Gem::Specification.new do |spec|
|
|
31
31
|
|
32
32
|
# Uncomment to register a new dependency of your gem
|
33
33
|
spec.add_dependency "pstore"
|
34
|
+
spec.add_dependency "z4blockchain"
|
34
35
|
spec.add_dependency "pry"
|
35
36
|
|
36
37
|
# For more information and examples about making a new gem, check out our
|
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.3
|
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
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: z4blockchain
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: pry
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|