fbe 0.26.7 → 0.26.9
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/.github/workflows/typos.yml +1 -1
- data/lib/fbe/delete.rb +2 -3
- data/lib/fbe/overwrite.rb +10 -8
- data/lib/fbe.rb +1 -1
- data/rules/basic.fe +1 -1
- data/test/fbe/test_overwrite.rb +23 -9
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b08046f15653d392c8a4441ea55cffb0d36838b192bf0a8147bf4237e157e15
|
4
|
+
data.tar.gz: d70f364d33b36740908a990a9339e366720d688ab86c637f6559af3ee5589454
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 41ecad63a09077b376321f026f46b84e963baf211b7b0fc896f64e635c23f15a0fc939e63621f1654fb89ec37c58df203b45fa8030a4148b6e8a59af8d8958f4
|
7
|
+
data.tar.gz: 2212f426f77a2ddcd52a35f17dcc01bd38cba9fb78b73e7cafd0e20ffc69d53da282e67d1c5223d0797d21d31319373249377d1761a4b9c98c9604606ce15f63
|
data/.github/workflows/typos.yml
CHANGED
data/lib/fbe/delete.rb
CHANGED
@@ -16,7 +16,7 @@ require_relative 'fb'
|
|
16
16
|
# @param [Array<String>] props List of property names to delete
|
17
17
|
# @param [Factbase] fb The factbase to use (defaults to Fbe.fb)
|
18
18
|
# @param [String] id The property name used as unique identifier (defaults to '_id')
|
19
|
-
# @return [
|
19
|
+
# @return [nil] Nothing
|
20
20
|
# @raise [RuntimeError] If fact is nil, has no ID, or ID property doesn't exist
|
21
21
|
# @example Delete multiple properties from a fact
|
22
22
|
# fact = fb.query('(eq type "user")').first
|
@@ -36,12 +36,11 @@ def Fbe.delete(fact, *props, fb: Fbe.fb, id: '_id')
|
|
36
36
|
end
|
37
37
|
before.delete(id)
|
38
38
|
fb.query("(eq #{id} #{i})").delete!
|
39
|
-
c = nil
|
40
39
|
fb.txn do |fbt|
|
41
40
|
c = fbt.insert
|
42
41
|
before.each do |k, v|
|
43
42
|
c.send(:"#{k}=", v) if c[k].nil?
|
44
43
|
end
|
45
44
|
end
|
46
|
-
|
45
|
+
nil
|
47
46
|
end
|
data/lib/fbe/overwrite.rb
CHANGED
@@ -19,7 +19,7 @@ require_relative 'fb'
|
|
19
19
|
# @param [String] property The name of the property to set
|
20
20
|
# @param [Any] value The value to set (can be any type)
|
21
21
|
# @param [Factbase] fb The factbase to use (defaults to Fbe.fb)
|
22
|
-
# @return [
|
22
|
+
# @return [nil] Nothing
|
23
23
|
# @raise [RuntimeError] If fact is nil, has no _id, or property is not a String
|
24
24
|
# @note This operation preserves all other properties during recreation
|
25
25
|
# @note If property already has the same single value, no changes are made
|
@@ -39,13 +39,15 @@ def Fbe.overwrite(fact, property, value, fb: Fbe.fb)
|
|
39
39
|
id = fact['_id']&.first
|
40
40
|
raise 'There is no _id in the fact, cannot use Fbe.overwrite' if id.nil?
|
41
41
|
raise "No facts by _id = #{id}" if fb.query("(eq _id #{id})").delete!.zero?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
fb.txn do |fbt|
|
43
|
+
n = fbt.insert
|
44
|
+
before[property.to_s] = [value]
|
45
|
+
before.each do |k, vv|
|
46
|
+
next unless n[k].nil?
|
47
|
+
vv.each do |v|
|
48
|
+
n.send(:"#{k}=", v)
|
49
|
+
end
|
48
50
|
end
|
49
51
|
end
|
50
|
-
|
52
|
+
nil
|
51
53
|
end
|
data/lib/fbe.rb
CHANGED
data/rules/basic.fe
CHANGED
data/test/fbe/test_overwrite.rb
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
# SPDX-License-Identifier: MIT
|
5
5
|
|
6
6
|
require 'factbase'
|
7
|
+
require 'judges/options'
|
8
|
+
require 'loog'
|
7
9
|
require_relative '../../lib/fbe/overwrite'
|
8
10
|
require_relative '../test__helper'
|
9
11
|
|
@@ -39,15 +41,6 @@ class TestOverwrite < Fbe::Test
|
|
39
41
|
assert_equal(['bye'], f2['foo'])
|
40
42
|
end
|
41
43
|
|
42
|
-
def test_overwrite_twice
|
43
|
-
fb = Factbase.new
|
44
|
-
f = fb.insert
|
45
|
-
f._id = 1
|
46
|
-
f2 = Fbe.overwrite(f, 'foo', 42, fb:)
|
47
|
-
Fbe.overwrite(f2, 'bar', 7, fb:)
|
48
|
-
assert_equal(42, fb.query('(exists foo)').each.to_a.first.foo)
|
49
|
-
end
|
50
|
-
|
51
44
|
def test_no_need_to_overwrite
|
52
45
|
fb = Factbase.new
|
53
46
|
f = fb.insert
|
@@ -86,4 +79,25 @@ class TestOverwrite < Fbe::Test
|
|
86
79
|
Fbe.overwrite(f3, 'foo', 42, fb:)
|
87
80
|
assert_equal(3, fb.size)
|
88
81
|
end
|
82
|
+
|
83
|
+
def test_overwrites_in_transaction
|
84
|
+
$fb = Factbase.new
|
85
|
+
$global = {}
|
86
|
+
$options = Judges::Options.new(job_id: 42)
|
87
|
+
$loog = Loog::Buffer.new
|
88
|
+
Fbe.fb.txn do |fbt|
|
89
|
+
fbt.insert.then do |f|
|
90
|
+
f.issue = 444
|
91
|
+
f.where = 'github'
|
92
|
+
f.repository = 555
|
93
|
+
f.who = 887
|
94
|
+
f.when = Time.now
|
95
|
+
f.foo = 1
|
96
|
+
end
|
97
|
+
end
|
98
|
+
f1 = Fbe.fb.query('(always)').each.to_a.first
|
99
|
+
Fbe.overwrite(f1, 'foo', 'bar')
|
100
|
+
f2 = Fbe.fb.query('(always)').each.to_a.first
|
101
|
+
assert_equal('bar', f2.foo)
|
102
|
+
end
|
89
103
|
end
|