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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f50658ed4f005f217ac62d0d7915a02bda424b81b27b8fd28c04d72a87720f42
4
- data.tar.gz: 96593b68ec2ead36739708e150794a640786f76bb015476a90f80814f0f211fb
3
+ metadata.gz: b1a1f43a45551ecd6d7dc96d1fc2d64e72b535ad92869f28b6efd1c2aafa6619
4
+ data.tar.gz: 716e6a3a3e44f7f91249feec8e385463eba0a1cc9ec695f361367d2ed6e0a5eb
5
5
  SHA512:
6
- metadata.gz: 5595f2de94f831ed456771bfbf52efb86b2c3e29be426923dadcdee51389983ef2bedd2e41cdccb5246b91682cc7bb47164f7bf8adefbd2cf08f76812e8412a7
7
- data.tar.gz: ccbf0464b43eb277c497e27f3827c7cd3051fc94e34c727c4c258d3a999d717a600635eda52c62a874165eb3bf7804a0665edbe1bdaf7eca47aa1e568db9bc17
6
+ metadata.gz: 92de5dea89b80df3856a438d0d045ea7de3c5a607295cc7d11615bc1e4d730e4e8de4fbdd710da8d3d33046917d35ef44f6c2ef768ce8f7a2210b2e8524de224
7
+ data.tar.gz: 2ef47978b1ebbe1736cf6b7b4a8d231823cb8c958bf602a015a7b4ea703448b70ec1fcfcb2e1a212b162e1f0967c088eb302f5452c135b7021caae08333212ac
@@ -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.query(query), query, @loog)
52
+ Query.new(@fb, query, @loog)
52
53
  end
53
54
 
54
55
  def txn(this = self, &)
55
- r = false
56
- @fb.txn(this) do |x|
56
+ before = @fb.size
57
+ tail = nil
58
+ r = @fb.txn(this) do |x|
57
59
  tail = Factbase::Looged.elapsed do
58
- r = yield x
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(query, expr, loog)
117
- @query = query
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 r.zero?
159
- @loog.debug("Nothing deleted by '#{@expr}' #{tail}")
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.45'
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
- fb = Factbase::Looged.new(Factbase.new, Loog::NULL)
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
@@ -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.45
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-07 00:00:00.000000000 Z
11
+ date: 2024-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json