z4db 0.0.0 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/z4db/version.rb +1 -1
  3. data/lib/z4db.rb +50 -27
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 70a2984533d083826403fd48e3e4e321e1861e39e3a89377dc89536eb5911a27
4
- data.tar.gz: 243b4fd05733ac35a0be38571766696e17dd8e3c8252e895d3cb1cd55ae54d1c
3
+ metadata.gz: 7b1e0e7ec2f3ad482785ca8e89aeeaddda66236fae9c502f67befa2620a95333
4
+ data.tar.gz: d0f7542565c5cde7a7a65bb77582c2fa54ae64630bfd7c1db0969ba62609887b
5
5
  SHA512:
6
- metadata.gz: 69a63148b7597521bbbeb387c487f4a2fd9bbe92a56fcfba501a01905fcbbb8abdbb63ff99f44ae586ae44f7bd9123b468821d15b90f5daccf69042e7cee3081
7
- data.tar.gz: d3d3598de940c5c9c15f1d84f8d030c4636590638e430b9a953a0f97a7732bb2eec8ad8437491817d7c45ba992787ca72b7678ae1b7032d80c95c8460788e329
6
+ metadata.gz: 1675fc03143d446230ac7c2f6b4c2bdb5513126193349bb02107031d516ef9faa72c7479e11ced81e24ebe7ea5a2fc1b550fa3c58237c72f854fa36fef480477
7
+ data.tar.gz: c7d586a9d4649eba2df977a23a8e1c362d18e575843906f0017ccbf7e25d292cae9727e02ea788ef7731bebc98e38d19512c7b3ee9fd8635e2e4b2e83aac5c91
data/lib/z4db/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Z4db
4
- VERSION = '0.0.0'
4
+ VERSION = '0.0.2'
5
5
  COMMIT = `git log --format="%H" -n 1`.strip
6
6
  end
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
- module Z4db
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
- Z4db[@id, k]
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
- # getter
115
+ ##
116
+ # key getter
88
117
  def [](k); @db.transaction { |db| db[k] }; end
89
- # setter
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
- # bulk output
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); Z4[k, to_h[k]]; end
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.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-21 00:00:00.000000000 Z
11
+ date: 2023-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pstore