fbe 0.0.5 → 0.0.7
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/.rubocop.yml +2 -2
- data/Gemfile +1 -1
- data/Gemfile.lock +5 -5
- data/lib/fbe/conclude.rb +0 -6
- data/lib/fbe/fb.rb +15 -13
- data/lib/fbe/iterate.rb +30 -6
- data/lib/fbe.rb +1 -1
- data/rules/basic.fe +28 -9
- data/test/fbe/test_conclude.rb +3 -0
- data/test/fbe/test_fb.rb +1 -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: a0081d0ed95bf4d88cc396b55651521cf252d5a7894c93e5942a4f44f902a3bd
|
|
4
|
+
data.tar.gz: b9624f277446d361ac46b2e89d04e4b8b4a20c93adfa8c2f5b0452febde43b7b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 92fd51fff1c6f6347bfe1a89caa2e94bca3277c963ccaf4cce54b33144e1a38f6e060f771e8cab07503d064f1a1c4cbae47cbd5faca2ac338b6240e8308d3aff
|
|
7
|
+
data.tar.gz: 3e03f00ef4d1c127aa021c89a72ec3f8b273b43fe2bef85bc944063e52ae0fb77a4f93d8883b6c4855852b5f67c067ffd37be04bc7b1b73cc70b454d8e295a94
|
data/.rubocop.yml
CHANGED
|
@@ -40,10 +40,10 @@ Style/ClassAndModuleChildren:
|
|
|
40
40
|
Enabled: false
|
|
41
41
|
Layout/MultilineMethodCallIndentation:
|
|
42
42
|
Enabled: false
|
|
43
|
+
Metrics/BlockLength:
|
|
44
|
+
Enabled: false
|
|
43
45
|
Metrics/AbcSize:
|
|
44
46
|
Enabled: false
|
|
45
|
-
Metrics/BlockLength:
|
|
46
|
-
Max: 30
|
|
47
47
|
Metrics/CyclomaticComplexity:
|
|
48
48
|
Max: 25
|
|
49
49
|
Metrics/PerceivedComplexity:
|
data/Gemfile
CHANGED
|
@@ -28,7 +28,7 @@ gem 'rake', '13.2.1', require: false
|
|
|
28
28
|
gem 'rspec-rails', '6.1.3', require: false
|
|
29
29
|
gem 'rubocop', '1.64.1', require: false
|
|
30
30
|
gem 'rubocop-performance', '1.21.1', require: false
|
|
31
|
-
gem 'rubocop-rspec', '3.0.
|
|
31
|
+
gem 'rubocop-rspec', '3.0.2', require: false
|
|
32
32
|
gem 'simplecov', '0.22.0', require: false
|
|
33
33
|
gem 'simplecov-cobertura', '2.1.0', require: false
|
|
34
34
|
gem 'yard', '0.9.36', require: false
|
data/Gemfile.lock
CHANGED
|
@@ -62,7 +62,7 @@ GEM
|
|
|
62
62
|
erubi (1.13.0)
|
|
63
63
|
ethon (0.16.0)
|
|
64
64
|
ffi (>= 1.15.0)
|
|
65
|
-
factbase (0.0.
|
|
65
|
+
factbase (0.0.60)
|
|
66
66
|
backtrace (~> 0.3)
|
|
67
67
|
decoor (~> 0.0)
|
|
68
68
|
json (~> 2.7)
|
|
@@ -94,7 +94,7 @@ GEM
|
|
|
94
94
|
reline (>= 0.4.2)
|
|
95
95
|
iri (0.8.0)
|
|
96
96
|
json (2.7.2)
|
|
97
|
-
judges (0.15.
|
|
97
|
+
judges (0.15.3)
|
|
98
98
|
backtrace (~> 0.3)
|
|
99
99
|
concurrent-ruby (~> 1.2)
|
|
100
100
|
factbase (~> 0.0)
|
|
@@ -139,7 +139,7 @@ GEM
|
|
|
139
139
|
stringio
|
|
140
140
|
public_suffix (6.0.0)
|
|
141
141
|
racc (1.8.0)
|
|
142
|
-
rack (3.1.
|
|
142
|
+
rack (3.1.6)
|
|
143
143
|
rack-session (2.0.0)
|
|
144
144
|
rack (>= 3.0.0)
|
|
145
145
|
rack-test (2.1.0)
|
|
@@ -205,7 +205,7 @@ GEM
|
|
|
205
205
|
rubocop-performance (1.21.1)
|
|
206
206
|
rubocop (>= 1.48.1, < 2.0)
|
|
207
207
|
rubocop-ast (>= 1.31.1, < 2.0)
|
|
208
|
-
rubocop-rspec (3.0.
|
|
208
|
+
rubocop-rspec (3.0.2)
|
|
209
209
|
rubocop (~> 1.61)
|
|
210
210
|
ruby-progressbar (1.13.0)
|
|
211
211
|
sawyer (0.9.2)
|
|
@@ -251,7 +251,7 @@ DEPENDENCIES
|
|
|
251
251
|
rspec-rails (= 6.1.3)
|
|
252
252
|
rubocop (= 1.64.1)
|
|
253
253
|
rubocop-performance (= 1.21.1)
|
|
254
|
-
rubocop-rspec (= 3.0.
|
|
254
|
+
rubocop-rspec (= 3.0.2)
|
|
255
255
|
simplecov (= 0.22.0)
|
|
256
256
|
simplecov-cobertura (= 2.1.0)
|
|
257
257
|
yard (= 0.9.36)
|
data/lib/fbe/conclude.rb
CHANGED
|
@@ -44,7 +44,6 @@ class Fbe::Conclude
|
|
|
44
44
|
@loog = loog
|
|
45
45
|
@query = nil
|
|
46
46
|
@follows = []
|
|
47
|
-
@threshold = 9999
|
|
48
47
|
@quota_aware = false
|
|
49
48
|
end
|
|
50
49
|
|
|
@@ -57,10 +56,6 @@ class Fbe::Conclude
|
|
|
57
56
|
@query = query
|
|
58
57
|
end
|
|
59
58
|
|
|
60
|
-
def threshold(max)
|
|
61
|
-
@threshold = max
|
|
62
|
-
end
|
|
63
|
-
|
|
64
59
|
def follow(props)
|
|
65
60
|
@follows = props.split
|
|
66
61
|
end
|
|
@@ -96,7 +91,6 @@ class Fbe::Conclude
|
|
|
96
91
|
@fb.txn do |fbt|
|
|
97
92
|
fbt.query(@query).each do |a|
|
|
98
93
|
throw :stop if @quota_aware && Fbe.octo(loog: @loog).off_quota
|
|
99
|
-
throw :stop if passed >= @threshold
|
|
100
94
|
n = yield fbt, a
|
|
101
95
|
@loog.info("#{n.what}: #{n.details}") unless n.nil?
|
|
102
96
|
passed += 1
|
data/lib/fbe/fb.rb
CHANGED
|
@@ -29,18 +29,20 @@ require 'factbase/pre'
|
|
|
29
29
|
require 'factbase/rules'
|
|
30
30
|
require_relative '../fbe'
|
|
31
31
|
|
|
32
|
-
def Fbe.fb
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
32
|
+
def Fbe.fb(global: $global)
|
|
33
|
+
global[:fb] ||= begin
|
|
34
|
+
rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) }
|
|
35
|
+
fb = Factbase::Rules.new(
|
|
36
|
+
$fb,
|
|
37
|
+
"(and \n#{rules.join("\n")}\n)",
|
|
38
|
+
uid: '_id'
|
|
39
|
+
)
|
|
40
|
+
fb = Factbase::Pre.new(fb) do |f|
|
|
41
|
+
max = $fb.query('(eq _id (max _id))').each.to_a.first
|
|
42
|
+
f._id = (max.nil? ? 0 : max._id) + 1
|
|
43
|
+
f._time = Time.now
|
|
44
|
+
f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{$options.judges_action_version}"
|
|
45
|
+
end
|
|
46
|
+
Factbase::Looged.new(fb, Loog::NULL)
|
|
44
47
|
end
|
|
45
|
-
Factbase::Looged.new(fb, Loog::NULL)
|
|
46
48
|
end
|
data/lib/fbe/iterate.rb
CHANGED
|
@@ -78,7 +78,10 @@ class Fbe::Iterate
|
|
|
78
78
|
loop do
|
|
79
79
|
repos.each do |repo|
|
|
80
80
|
seen[repo] = 0 if seen[repo].nil?
|
|
81
|
-
|
|
81
|
+
if seen[repo] > @limit
|
|
82
|
+
@loog.debug("We've seen too many in the #{repo} repo, time to move to the next one")
|
|
83
|
+
next
|
|
84
|
+
end
|
|
82
85
|
rid = oct.repo_id_by_name(repo)
|
|
83
86
|
before = Fbe.fb.query(
|
|
84
87
|
"(agg (and (eq what '#{@label}') (eq where 'github') (eq repository #{rid})) (first latest))"
|
|
@@ -86,21 +89,42 @@ class Fbe::Iterate
|
|
|
86
89
|
Fbe.fb.query("(and (eq what '#{@label}') (eq where 'github') (eq repository #{rid}))").delete!
|
|
87
90
|
before = before.nil? ? @since : before[0]
|
|
88
91
|
nxt = Fbe.fb.query(@query).one(before:, repository: rid)
|
|
89
|
-
after =
|
|
92
|
+
after =
|
|
93
|
+
if nxt.nil?
|
|
94
|
+
@loog.debug("Next is nil, starting from the beginning at #{@since}")
|
|
95
|
+
@since
|
|
96
|
+
else
|
|
97
|
+
@loog.debug("Next is #{nxt}, starting from it...")
|
|
98
|
+
yield(rid, nxt)
|
|
99
|
+
end
|
|
90
100
|
raise "Iterator must return an Integer, while #{after.class} returned" unless after.is_a?(Integer)
|
|
91
101
|
f = Fbe.fb.insert
|
|
92
102
|
f.where = 'github'
|
|
93
103
|
f.repository = rid
|
|
94
|
-
f.latest =
|
|
104
|
+
f.latest =
|
|
105
|
+
if after.nil?
|
|
106
|
+
@loog.debug("After is nil, setting the `latest` to nxt: #{nxt}")
|
|
107
|
+
nxt
|
|
108
|
+
else
|
|
109
|
+
@loog.debug("After is #{after}, setting the `latest` to it")
|
|
110
|
+
after
|
|
111
|
+
end
|
|
95
112
|
f.what = @label
|
|
96
113
|
seen[repo] += 1
|
|
97
|
-
|
|
114
|
+
if oct.off_quota
|
|
115
|
+
@loog.debug('We are off GitHub quota, time to stop')
|
|
116
|
+
break
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
if oct.off_quota
|
|
120
|
+
@loog.debug('We are off GitHub quota, time to stop')
|
|
121
|
+
break
|
|
98
122
|
end
|
|
99
|
-
break if oct.off_quota
|
|
100
123
|
unless seen.values.any? { |v| v < @limit }
|
|
101
|
-
@loog.debug(
|
|
124
|
+
@loog.debug('No more repos to scan, quitting')
|
|
102
125
|
break
|
|
103
126
|
end
|
|
104
127
|
end
|
|
128
|
+
@loog.debug("Finished scanning #{repos.size} repos: #{seen.map { |k, v| "#{k}:#{v}" }.join(', ')}")
|
|
105
129
|
end
|
|
106
130
|
end
|
data/lib/fbe.rb
CHANGED
data/rules/basic.fe
CHANGED
|
@@ -29,13 +29,23 @@
|
|
|
29
29
|
return r
|
|
30
30
|
')
|
|
31
31
|
|
|
32
|
+
(explain (when
|
|
33
|
+
(exists _id)
|
|
34
|
+
(and
|
|
35
|
+
(unique _id)
|
|
36
|
+
(eq "Integer" (type _id))
|
|
37
|
+
(one _id))))
|
|
38
|
+
|
|
32
39
|
(explain (when
|
|
33
40
|
(exists what)
|
|
34
|
-
(
|
|
41
|
+
(and
|
|
42
|
+
(matches what "^[a-z]+(-[a-z]+)*$")
|
|
43
|
+
(one what))))
|
|
35
44
|
|
|
36
45
|
(explain (when
|
|
37
46
|
(exists details)
|
|
38
47
|
(and
|
|
48
|
+
(one details)
|
|
39
49
|
(not (matches details " "))
|
|
40
50
|
(not (matches details "^.{,80}$"))
|
|
41
51
|
(not (matches details "[^.]$")))))
|
|
@@ -43,46 +53,54 @@
|
|
|
43
53
|
(explain (when
|
|
44
54
|
(exists where)
|
|
45
55
|
(and
|
|
56
|
+
(one where)
|
|
46
57
|
(eq "String" (type where))
|
|
47
58
|
(eq "github" where))))
|
|
48
59
|
|
|
49
|
-
(explain (when
|
|
50
|
-
(exists _id)
|
|
51
|
-
(eq "Integer" (type _id))))
|
|
52
|
-
|
|
53
60
|
(explain (when
|
|
54
61
|
(exists _time)
|
|
55
|
-
(
|
|
62
|
+
(and
|
|
63
|
+
(one _time)
|
|
64
|
+
(eq "Time" (type _time)))))
|
|
56
65
|
|
|
57
66
|
(explain (when
|
|
58
67
|
(exists _version)
|
|
59
|
-
(
|
|
68
|
+
(and
|
|
69
|
+
(one _version)
|
|
70
|
+
(eq "String" (type _version)))))
|
|
60
71
|
|
|
61
72
|
(explain (when
|
|
62
73
|
(exists why)
|
|
63
|
-
(
|
|
74
|
+
(and
|
|
75
|
+
(one why)
|
|
76
|
+
(eq "String" (type why)))))
|
|
64
77
|
|
|
65
78
|
(explain (when
|
|
66
79
|
(exists issue)
|
|
67
80
|
(and
|
|
81
|
+
(one issue)
|
|
68
82
|
(eq "Integer" (type issue))
|
|
69
83
|
(gt issue 0))))
|
|
70
84
|
|
|
71
85
|
(explain (when
|
|
72
86
|
(exists repository)
|
|
73
87
|
(and
|
|
88
|
+
(one repository)
|
|
74
89
|
(eq "Integer" (type repository))
|
|
75
90
|
(gt repository 0))))
|
|
76
91
|
|
|
77
92
|
(explain (when
|
|
78
93
|
(exists who)
|
|
79
94
|
(and
|
|
95
|
+
(one who)
|
|
80
96
|
(eq "Integer" (type who))
|
|
81
97
|
(gt who 0))))
|
|
82
98
|
|
|
83
99
|
(explain (when
|
|
84
100
|
(exists when)
|
|
85
|
-
(
|
|
101
|
+
(and
|
|
102
|
+
(one when)
|
|
103
|
+
(eq "Time" (type when)))))
|
|
86
104
|
|
|
87
105
|
(explain (when
|
|
88
106
|
(exists issue)
|
|
@@ -95,6 +113,7 @@
|
|
|
95
113
|
(explain (when
|
|
96
114
|
(exists award)
|
|
97
115
|
(and
|
|
116
|
+
(one award)
|
|
98
117
|
(eq "Integer" (type award))
|
|
99
118
|
(exists when)
|
|
100
119
|
(exists who)
|
data/test/fbe/test_conclude.rb
CHANGED
|
@@ -37,6 +37,7 @@ require_relative '../../lib/fbe/fb'
|
|
|
37
37
|
class TestConclude < Minitest::Test
|
|
38
38
|
def test_with_defaults
|
|
39
39
|
$fb = Factbase.new
|
|
40
|
+
$global = {}
|
|
40
41
|
$options = Judges::Options.new
|
|
41
42
|
$loog = Loog::NULL
|
|
42
43
|
Fbe.conclude do
|
|
@@ -63,6 +64,7 @@ class TestConclude < Minitest::Test
|
|
|
63
64
|
|
|
64
65
|
def test_maybe
|
|
65
66
|
$fb = Factbase.new
|
|
67
|
+
$global = {}
|
|
66
68
|
$options = Judges::Options.new
|
|
67
69
|
$loog = Loog::NULL
|
|
68
70
|
Fbe.fb.insert.foo = 1
|
|
@@ -84,6 +86,7 @@ class TestConclude < Minitest::Test
|
|
|
84
86
|
|
|
85
87
|
def test_consider
|
|
86
88
|
$fb = Factbase.new
|
|
89
|
+
$global = {}
|
|
87
90
|
$options = Judges::Options.new
|
|
88
91
|
$loog = Loog::NULL
|
|
89
92
|
Fbe.fb.insert.foo = 1
|
data/test/fbe/test_fb.rb
CHANGED
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.7
|
|
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-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: backtrace
|