factbase 0.0.45 → 0.0.46
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/factbase/looged.rb +18 -13
- data/lib/factbase.rb +1 -1
- data/test/factbase/test_looged.rb +12 -2
- data/test/test_factbase.rb +8 -0
- 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: b1a1f43a45551ecd6d7dc96d1fc2d64e72b535ad92869f28b6efd1c2aafa6619
|
4
|
+
data.tar.gz: 716e6a3a3e44f7f91249feec8e385463eba0a1cc9ec695f361367d2ed6e0a5eb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 92de5dea89b80df3856a438d0d045ea7de3c5a607295cc7d11615bc1e4d730e4e8de4fbdd710da8d3d33046917d35ef44f6c2ef768ce8f7a2210b2e8524de224
|
7
|
+
data.tar.gz: 2ef47978b1ebbe1736cf6b7b4a8d231823cb8c958bf602a015a7b4ea703448b70ec1fcfcb2e1a212b162e1f0967c088eb302f5452c135b7021caae08333212ac
|
data/lib/factbase/looged.rb
CHANGED
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
require 'time'
|
24
24
|
require 'loog'
|
25
|
+
require_relative 'syntax'
|
25
26
|
|
26
27
|
# A decorator of a Factbase, that logs all operations.
|
27
28
|
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
@@ -48,17 +49,18 @@ class Factbase::Looged
|
|
48
49
|
end
|
49
50
|
|
50
51
|
def query(query)
|
51
|
-
Query.new(@fb
|
52
|
+
Query.new(@fb, query, @loog)
|
52
53
|
end
|
53
54
|
|
54
55
|
def txn(this = self, &)
|
55
|
-
|
56
|
-
|
56
|
+
before = @fb.size
|
57
|
+
tail = nil
|
58
|
+
r = @fb.txn(this) do |x|
|
57
59
|
tail = Factbase::Looged.elapsed do
|
58
|
-
|
60
|
+
yield x
|
59
61
|
end
|
60
|
-
@loog.debug("Txn #{r ? 'modified' : 'did nothing'} #{tail}")
|
61
62
|
end
|
63
|
+
@loog.debug("Txn #{r ? 'modified' : 'didn\'t touch'} #{before} facts #{tail}")
|
62
64
|
r
|
63
65
|
end
|
64
66
|
|
@@ -113,8 +115,8 @@ class Factbase::Looged
|
|
113
115
|
# This is an internal class, it is not supposed to be instantiated directly.
|
114
116
|
#
|
115
117
|
class Query
|
116
|
-
def initialize(
|
117
|
-
@
|
118
|
+
def initialize(fb, expr, loog)
|
119
|
+
@fb = fb
|
118
120
|
@expr = expr
|
119
121
|
@loog = loog
|
120
122
|
end
|
@@ -124,7 +126,7 @@ class Factbase::Looged
|
|
124
126
|
if block_given?
|
125
127
|
r = nil
|
126
128
|
tail = Factbase::Looged.elapsed do
|
127
|
-
r = @query.each(&)
|
129
|
+
r = @fb.query(@expr).each(&)
|
128
130
|
end
|
129
131
|
raise ".each of #{@query.class} returned #{r.class}" unless r.is_a?(Integer)
|
130
132
|
if r.zero?
|
@@ -136,7 +138,7 @@ class Factbase::Looged
|
|
136
138
|
else
|
137
139
|
array = []
|
138
140
|
tail = Factbase::Looged.elapsed do
|
139
|
-
@query.each do |f|
|
141
|
+
@fb.query(@expr).each do |f|
|
140
142
|
array << f
|
141
143
|
end
|
142
144
|
end
|
@@ -151,14 +153,17 @@ class Factbase::Looged
|
|
151
153
|
|
152
154
|
def delete!
|
153
155
|
r = nil
|
156
|
+
before = @fb.size
|
154
157
|
tail = Factbase::Looged.elapsed do
|
155
|
-
r = @query.delete!
|
158
|
+
r = @fb.query(@expr).delete!
|
156
159
|
end
|
157
160
|
raise ".delete! of #{@query.class} returned #{r.class}" unless r.is_a?(Integer)
|
158
|
-
if
|
159
|
-
@loog.debug("
|
161
|
+
if before.zero?
|
162
|
+
@loog.debug("There were no facts, nothing deleted by '#{@expr}' #{tail}")
|
163
|
+
elsif r.zero?
|
164
|
+
@loog.debug("No facts out of #{before} deleted by '#{@expr}' #{tail}")
|
160
165
|
else
|
161
|
-
@loog.debug("Deleted #{r} fact(s) by '#{@expr}' #{tail}")
|
166
|
+
@loog.debug("Deleted #{r} fact(s) out of #{before} by '#{@expr}' #{tail}")
|
162
167
|
end
|
163
168
|
r
|
164
169
|
end
|
data/lib/factbase.rb
CHANGED
@@ -79,7 +79,7 @@ require 'yaml'
|
|
79
79
|
# License:: MIT
|
80
80
|
class Factbase
|
81
81
|
# Current version of the gem (changed by .rultor.yml on every release)
|
82
|
-
VERSION = '0.0.
|
82
|
+
VERSION = '0.0.46'
|
83
83
|
|
84
84
|
# An exception that may be thrown in a transaction, to roll it back.
|
85
85
|
class Rollback < StandardError; end
|
@@ -22,6 +22,7 @@
|
|
22
22
|
|
23
23
|
require 'minitest/autorun'
|
24
24
|
require 'loog'
|
25
|
+
require_relative '../../lib/factbase'
|
25
26
|
require_relative '../../lib/factbase/looged'
|
26
27
|
|
27
28
|
# Test.
|
@@ -45,13 +46,22 @@ class TestLooged < Minitest::Test
|
|
45
46
|
end
|
46
47
|
|
47
48
|
def test_with_txn
|
48
|
-
|
49
|
+
log = Loog::Buffer.new
|
50
|
+
fb = Factbase::Looged.new(Factbase.new, log)
|
49
51
|
assert(
|
50
52
|
fb.txn do |fbt|
|
51
53
|
fbt.insert.foo = 42
|
52
54
|
end
|
53
55
|
)
|
54
56
|
assert_equal(1, fb.size)
|
57
|
+
assert(log.to_s.include?('modified'), log)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_with_empty_txn
|
61
|
+
log = Loog::Buffer.new
|
62
|
+
fb = Factbase::Looged.new(Factbase.new, log)
|
63
|
+
assert(!fb.txn { |fbt| fbt.query('(always)').each.to_a })
|
64
|
+
assert(log.to_s.include?('didn\'t touch'), log)
|
55
65
|
end
|
56
66
|
|
57
67
|
def test_returns_int
|
@@ -102,7 +112,7 @@ class TestLooged < Minitest::Test
|
|
102
112
|
'Set \'bar\' to 3 (Integer)',
|
103
113
|
'Set \'str\' to "Он поскорей звонит. Вбегает\n ... Отъехать в поле к двум дубкам." (String)',
|
104
114
|
'Found 1 fact(s) by \'(exists bar)\'',
|
105
|
-
'Deleted 3 fact(s) by \'(not (exists bar))\''
|
115
|
+
'Deleted 3 fact(s) out of 4 by \'(not (exists bar))\''
|
106
116
|
].each do |s|
|
107
117
|
assert(log.to_s.include?(s), "#{log}\n")
|
108
118
|
end
|
data/test/test_factbase.rb
CHANGED
@@ -72,6 +72,14 @@ class TestFactbase < Minitest::Test
|
|
72
72
|
assert_equal(2, fb2.size)
|
73
73
|
end
|
74
74
|
|
75
|
+
def test_txn_returns_boolean
|
76
|
+
fb = Factbase.new
|
77
|
+
assert(fb.txn { true }.is_a?(FalseClass))
|
78
|
+
assert(fb.txn(&:insert).is_a?(TrueClass))
|
79
|
+
assert(fb.txn { |fbt| fbt.insert.bar = 42 })
|
80
|
+
assert(!fb.txn { |fbt| fbt.query('(always)').each.to_a })
|
81
|
+
end
|
82
|
+
|
75
83
|
def test_run_txn
|
76
84
|
fb = Factbase.new
|
77
85
|
fb.txn do |fbt|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.46
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-06-
|
11
|
+
date: 2024-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|