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.
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