fbe 0.0.7 → 0.0.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/lib/fbe/conclude.rb +7 -5
- data/lib/fbe/fb.rb +7 -7
- data/lib/fbe/if_absent.rb +1 -1
- data/lib/fbe/iterate.rb +26 -15
- data/lib/fbe.rb +1 -1
- data/test/fbe/test_conclude.rb +3 -3
- data/test/fbe/test_if_absent.rb +6 -6
- data/test/fbe/test_iterate.rb +2 -2
- 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: 17e78fab223160b05d20f3c4aa670b964c6a0c53c67e6f2b264fb353839f940a
|
4
|
+
data.tar.gz: d578180e2a82801da972e29ba894d747ed15cca21c306accdeacdde4150fa1ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8fec611bb907d4a15f4e69ac3e9f290fba29ec25982b74bb2f3d8de3e640e7456a40cfe0b858fbe8e2b55d13f09751223f444e604a26b0a669923fa2e869bd16
|
7
|
+
data.tar.gz: 19b80901292ff4651d6332c4f23e980ae0201b7356ede8639ea41265f1d2999445718cf7dfe81c78fbb4096441f694e9dbc2d640e3e3f6cf1d7abca3bb3b9e4a
|
data/lib/fbe/conclude.rb
CHANGED
@@ -28,8 +28,8 @@ require_relative 'octo'
|
|
28
28
|
require_relative 'if_absent'
|
29
29
|
|
30
30
|
# Create a conclude code block.
|
31
|
-
def Fbe.conclude(
|
32
|
-
c = Fbe::Conclude.new(
|
31
|
+
def Fbe.conclude(fb: Fbe.fb, judge: $judge, loog: $loog, options: $options, global: $global, &)
|
32
|
+
c = Fbe::Conclude.new(fb:, judge:, loog:, options:, global:)
|
33
33
|
c.instance_eval(&)
|
34
34
|
end
|
35
35
|
|
@@ -38,10 +38,12 @@ end
|
|
38
38
|
# Copyright:: Copyright (c) 2024 Zerocracy
|
39
39
|
# License:: MIT
|
40
40
|
class Fbe::Conclude
|
41
|
-
def initialize(fb, judge, loog)
|
41
|
+
def initialize(fb: Fbe.fb, judge: $judge, loog: $loog, options: $options, global: $global)
|
42
42
|
@fb = fb
|
43
43
|
@judge = judge
|
44
44
|
@loog = loog
|
45
|
+
@options = options
|
46
|
+
@global = global
|
45
47
|
@query = nil
|
46
48
|
@follows = []
|
47
49
|
@quota_aware = false
|
@@ -70,7 +72,7 @@ class Fbe::Conclude
|
|
70
72
|
|
71
73
|
def maybe(&)
|
72
74
|
roll do |fbt, a|
|
73
|
-
Fbe.if_absent(fbt) do |n|
|
75
|
+
Fbe.if_absent(fb: fbt) do |n|
|
74
76
|
fill(n, a, &)
|
75
77
|
end
|
76
78
|
end
|
@@ -90,7 +92,7 @@ class Fbe::Conclude
|
|
90
92
|
passed = 0
|
91
93
|
@fb.txn do |fbt|
|
92
94
|
fbt.query(@query).each do |a|
|
93
|
-
throw :stop if @quota_aware && Fbe.octo(loog: @loog).off_quota
|
95
|
+
throw :stop if @quota_aware && Fbe.octo(loog: @loog, options: @options, global: @global).off_quota
|
94
96
|
n = yield fbt, a
|
95
97
|
@loog.info("#{n.what}: #{n.details}") unless n.nil?
|
96
98
|
passed += 1
|
data/lib/fbe/fb.rb
CHANGED
@@ -29,20 +29,20 @@ require 'factbase/pre'
|
|
29
29
|
require 'factbase/rules'
|
30
30
|
require_relative '../fbe'
|
31
31
|
|
32
|
-
def Fbe.fb(global: $global)
|
32
|
+
def Fbe.fb(fb: $fb, global: $global, options: $options)
|
33
33
|
global[:fb] ||= begin
|
34
34
|
rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) }
|
35
|
-
|
36
|
-
|
35
|
+
fbe = Factbase::Rules.new(
|
36
|
+
fb,
|
37
37
|
"(and \n#{rules.join("\n")}\n)",
|
38
38
|
uid: '_id'
|
39
39
|
)
|
40
|
-
|
41
|
-
max =
|
40
|
+
fbe = Factbase::Pre.new(fbe) do |f|
|
41
|
+
max = fb.query('(eq _id (max _id))').each.to_a.first
|
42
42
|
f._id = (max.nil? ? 0 : max._id) + 1
|
43
43
|
f._time = Time.now
|
44
|
-
f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{
|
44
|
+
f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{options.judges_action_version}"
|
45
45
|
end
|
46
|
-
Factbase::Looged.new(
|
46
|
+
Factbase::Looged.new(fbe, Loog::NULL)
|
47
47
|
end
|
48
48
|
end
|
data/lib/fbe/if_absent.rb
CHANGED
data/lib/fbe/iterate.rb
CHANGED
@@ -28,8 +28,8 @@ require_relative 'octo'
|
|
28
28
|
require_relative 'fb'
|
29
29
|
|
30
30
|
# Create a conclude code block.
|
31
|
-
def Fbe.iterate(
|
32
|
-
c = Fbe::Iterate.new(
|
31
|
+
def Fbe.iterate(fb: Fbe.fb, loog: $loog, options: $options, global: $global, &)
|
32
|
+
c = Fbe::Iterate.new(fb:, loog:, options:, global:)
|
33
33
|
c.instance_eval(&)
|
34
34
|
end
|
35
35
|
|
@@ -38,13 +38,15 @@ end
|
|
38
38
|
# Copyright:: Copyright (c) 2024 Zerocracy
|
39
39
|
# License:: MIT
|
40
40
|
class Fbe::Iterate
|
41
|
-
def initialize(fb, loog)
|
41
|
+
def initialize(fb: Fbe.fb, loog: $loog, options: $options, global: $global)
|
42
42
|
@fb = fb
|
43
43
|
@loog = loog
|
44
|
+
@options = options
|
45
|
+
@global = global
|
44
46
|
@label = nil
|
45
47
|
@since = 0
|
46
48
|
@query = nil
|
47
|
-
@
|
49
|
+
@repeats = 1
|
48
50
|
@quota_aware = false
|
49
51
|
end
|
50
52
|
|
@@ -52,9 +54,10 @@ class Fbe::Iterate
|
|
52
54
|
@quota_aware = true
|
53
55
|
end
|
54
56
|
|
55
|
-
def
|
56
|
-
raise 'Cannot set "
|
57
|
-
|
57
|
+
def repeats(repeats)
|
58
|
+
raise 'Cannot set "repeats" to nil' if repeats.nil?
|
59
|
+
raise 'The "repeats" must be a positive integer' unless repeats.positive?
|
60
|
+
@repeats = repeats
|
58
61
|
end
|
59
62
|
|
60
63
|
def by(query)
|
@@ -69,16 +72,23 @@ class Fbe::Iterate
|
|
69
72
|
@label = label
|
70
73
|
end
|
71
74
|
|
75
|
+
# It makes a number of repeats of going through all repositories
|
76
|
+
# provided by the "repositories" configuration option. In each "repeat"
|
77
|
+
# it yields the repository ID and a number that is retrieved by the
|
78
|
+
# "query". The query is supplied with two parameter:
|
79
|
+
# "$before" (the value from the previous repeat and "$rid" (the repo ID).
|
72
80
|
def over(&)
|
73
81
|
raise 'Use "as" first' if @label.nil?
|
74
82
|
raise 'Use "by" first' if @query.nil?
|
75
83
|
seen = {}
|
76
|
-
oct = Fbe.octo(loog: @loog)
|
77
|
-
repos = Fbe.unmask_repos(loog: @loog)
|
84
|
+
oct = Fbe.octo(loog: @loog, options: @options, global: @global)
|
85
|
+
repos = Fbe.unmask_repos(loog: @loog, options: @options, global: @global)
|
86
|
+
restarted = []
|
78
87
|
loop do
|
79
88
|
repos.each do |repo|
|
89
|
+
next if restarted.include?(repo)
|
80
90
|
seen[repo] = 0 if seen[repo].nil?
|
81
|
-
if seen[repo]
|
91
|
+
if seen[repo] >= @repeats
|
82
92
|
@loog.debug("We've seen too many in the #{repo} repo, time to move to the next one")
|
83
93
|
next
|
84
94
|
end
|
@@ -87,14 +97,15 @@ class Fbe::Iterate
|
|
87
97
|
"(agg (and (eq what '#{@label}') (eq where 'github') (eq repository #{rid})) (first latest))"
|
88
98
|
).one
|
89
99
|
Fbe.fb.query("(and (eq what '#{@label}') (eq where 'github') (eq repository #{rid}))").delete!
|
90
|
-
before = before.nil? ? @since : before
|
100
|
+
before = before.nil? ? @since : before.first
|
91
101
|
nxt = Fbe.fb.query(@query).one(before:, repository: rid)
|
92
102
|
after =
|
93
103
|
if nxt.nil?
|
94
104
|
@loog.debug("Next is nil, starting from the beginning at #{@since}")
|
105
|
+
restarted << repo
|
95
106
|
@since
|
96
107
|
else
|
97
|
-
@loog.debug("Next is
|
108
|
+
@loog.debug("Next is ##{nxt}, starting from it...")
|
98
109
|
yield(rid, nxt)
|
99
110
|
end
|
100
111
|
raise "Iterator must return an Integer, while #{after.class} returned" unless after.is_a?(Integer)
|
@@ -103,10 +114,10 @@ class Fbe::Iterate
|
|
103
114
|
f.repository = rid
|
104
115
|
f.latest =
|
105
116
|
if after.nil?
|
106
|
-
@loog.debug("After is nil, setting the `latest` to nxt:
|
117
|
+
@loog.debug("After is nil at #{repo}, setting the `latest` to nxt: ##{nxt}")
|
107
118
|
nxt
|
108
119
|
else
|
109
|
-
@loog.debug("After is
|
120
|
+
@loog.debug("After is ##{after} at #{repo}, setting the `latest` to it")
|
110
121
|
after
|
111
122
|
end
|
112
123
|
f.what = @label
|
@@ -120,7 +131,7 @@ class Fbe::Iterate
|
|
120
131
|
@loog.debug('We are off GitHub quota, time to stop')
|
121
132
|
break
|
122
133
|
end
|
123
|
-
unless seen.values.any? { |v| v < @
|
134
|
+
unless seen.values.any? { |v| v < @repeats }
|
124
135
|
@loog.debug('No more repos to scan, quitting')
|
125
136
|
break
|
126
137
|
end
|
data/lib/fbe.rb
CHANGED
data/test/fbe/test_conclude.rb
CHANGED
@@ -49,7 +49,7 @@ class TestConclude < Minitest::Test
|
|
49
49
|
fb = Factbase.new
|
50
50
|
fb.insert.foo = 1
|
51
51
|
fb.insert.bar = 2
|
52
|
-
Fbe.conclude(fb
|
52
|
+
Fbe.conclude(fb:, judge: 'judge-one', loog: Loog::NULL) do
|
53
53
|
on '(exists foo)'
|
54
54
|
draw do |n, prev|
|
55
55
|
n.sum = prev.foo + 1
|
@@ -68,7 +68,7 @@ class TestConclude < Minitest::Test
|
|
68
68
|
$options = Judges::Options.new
|
69
69
|
$loog = Loog::NULL
|
70
70
|
Fbe.fb.insert.foo = 1
|
71
|
-
Fbe.conclude(
|
71
|
+
Fbe.conclude(judge: 'issue-was-opened', loog: Loog::NULL) do
|
72
72
|
on '(exists foo)'
|
73
73
|
maybe do |n, prev|
|
74
74
|
n.repository = 111
|
@@ -90,7 +90,7 @@ class TestConclude < Minitest::Test
|
|
90
90
|
$options = Judges::Options.new
|
91
91
|
$loog = Loog::NULL
|
92
92
|
Fbe.fb.insert.foo = 1
|
93
|
-
Fbe.conclude(
|
93
|
+
Fbe.conclude(judge: 'issue-was-closed', loog: Loog::NULL) do
|
94
94
|
on '(exists foo)'
|
95
95
|
consider do |_prev|
|
96
96
|
Fbe.fb.insert.bar = 42
|
data/test/fbe/test_if_absent.rb
CHANGED
@@ -37,7 +37,7 @@ class TestIfAbsent < Minitest::Test
|
|
37
37
|
def test_ignores
|
38
38
|
fb = Factbase.new
|
39
39
|
fb.insert.foo = 'hello dude'
|
40
|
-
n = Fbe.if_absent(fb) do |f|
|
40
|
+
n = Fbe.if_absent(fb:) do |f|
|
41
41
|
f.foo = 'hello dude'
|
42
42
|
end
|
43
43
|
assert(n.nil?)
|
@@ -47,7 +47,7 @@ class TestIfAbsent < Minitest::Test
|
|
47
47
|
fb = Factbase.new
|
48
48
|
t = Time.now
|
49
49
|
fb.insert.foo = t
|
50
|
-
n = Fbe.if_absent(fb) do |f|
|
50
|
+
n = Fbe.if_absent(fb:) do |f|
|
51
51
|
f.foo = t
|
52
52
|
end
|
53
53
|
assert(n.nil?)
|
@@ -55,14 +55,14 @@ class TestIfAbsent < Minitest::Test
|
|
55
55
|
|
56
56
|
def test_injects
|
57
57
|
fb = Factbase.new
|
58
|
-
n = Fbe.if_absent(fb) do |f|
|
58
|
+
n = Fbe.if_absent(fb:) do |f|
|
59
59
|
f.foo = 42
|
60
60
|
end
|
61
61
|
assert_equal(42, n.foo)
|
62
62
|
end
|
63
63
|
|
64
64
|
def test_injects_and_reads
|
65
|
-
Fbe.if_absent(Factbase.new) do |f|
|
65
|
+
Fbe.if_absent(fb: Factbase.new) do |f|
|
66
66
|
f.foo = 42
|
67
67
|
assert_equal(42, f.foo)
|
68
68
|
end
|
@@ -76,7 +76,7 @@ class TestIfAbsent < Minitest::Test
|
|
76
76
|
t = Time.now
|
77
77
|
f1.z = t
|
78
78
|
f1.bar = 3.14
|
79
|
-
n = Fbe.if_absent(fb) do |f|
|
79
|
+
n = Fbe.if_absent(fb:) do |f|
|
80
80
|
f.foo = 'hello, "dude"!'
|
81
81
|
f.abc = 42
|
82
82
|
f.z = t
|
@@ -93,7 +93,7 @@ class TestIfAbsent < Minitest::Test
|
|
93
93
|
t = Time.now
|
94
94
|
f1.z = t
|
95
95
|
f1.bar = 3.14
|
96
|
-
n = Fbe.if_absent(fb) do |f|
|
96
|
+
n = Fbe.if_absent(fb:) do |f|
|
97
97
|
f.foo = "hello, \\\"dude\\\" \\' \\' ( \n\n ) (! '"
|
98
98
|
f.abc = 42
|
99
99
|
f.z = t + 1
|
data/test/fbe/test_iterate.rb
CHANGED
@@ -38,10 +38,10 @@ class TestIterate < Minitest::Test
|
|
38
38
|
$global = {}
|
39
39
|
$fb = Factbase.new
|
40
40
|
$fb.insert.foo = 42
|
41
|
-
Fbe.iterate(
|
41
|
+
Fbe.iterate(loog: Loog::NULL) do
|
42
42
|
as 'labels-were-scanned'
|
43
43
|
by '(agg (always) (max foo))'
|
44
|
-
|
44
|
+
repeats 2
|
45
45
|
over do |_repository, foo|
|
46
46
|
f = $fb.insert
|
47
47
|
f.foo = foo + 1
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fbe
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
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-07-
|
11
|
+
date: 2024-07-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|