factbase 0.0.45 → 0.0.46

Sign up to get free protection for your applications and to get access to all the features.
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