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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0081d0ed95bf4d88cc396b55651521cf252d5a7894c93e5942a4f44f902a3bd
4
- data.tar.gz: b9624f277446d361ac46b2e89d04e4b8b4a20c93adfa8c2f5b0452febde43b7b
3
+ metadata.gz: 17e78fab223160b05d20f3c4aa670b964c6a0c53c67e6f2b264fb353839f940a
4
+ data.tar.gz: d578180e2a82801da972e29ba894d747ed15cca21c306accdeacdde4150fa1ab
5
5
  SHA512:
6
- metadata.gz: 92fd51fff1c6f6347bfe1a89caa2e94bca3277c963ccaf4cce54b33144e1a38f6e060f771e8cab07503d064f1a1c4cbae47cbd5faca2ac338b6240e8308d3aff
7
- data.tar.gz: 3e03f00ef4d1c127aa021c89a72ec3f8b273b43fe2bef85bc944063e52ae0fb77a4f93d8883b6c4855852b5f67c067ffd37be04bc7b1b73cc70b454d8e295a94
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(fbx = Fbe.fb, judge = $judge, loog = $loog, &)
32
- c = Fbe::Conclude.new(fbx, judge, loog)
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
- fb = Factbase::Rules.new(
36
- $fb,
35
+ fbe = Factbase::Rules.new(
36
+ fb,
37
37
  "(and \n#{rules.join("\n")}\n)",
38
38
  uid: '_id'
39
39
  )
40
- fb = Factbase::Pre.new(fb) do |f|
41
- max = $fb.query('(eq _id (max _id))').each.to_a.first
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}/#{$options.judges_action_version}"
44
+ f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{options.judges_action_version}"
45
45
  end
46
- Factbase::Looged.new(fb, Loog::NULL)
46
+ Factbase::Looged.new(fbe, Loog::NULL)
47
47
  end
48
48
  end
data/lib/fbe/if_absent.rb CHANGED
@@ -28,7 +28,7 @@ require_relative '../fbe'
28
28
  require_relative 'fb'
29
29
 
30
30
  # Injects a fact if it's absent in the factbase.
31
- def Fbe.if_absent(fb = Fbe.fb)
31
+ def Fbe.if_absent(fb: Fbe.fb)
32
32
  attrs = {}
33
33
  f = others(map: attrs) do |*args|
34
34
  k = args[0]
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(fbx = Fbe.fb, loog = $loog, &)
32
- c = Fbe::Iterate.new(fbx, loog)
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
- @limit = 100
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 limit(limit)
56
- raise 'Cannot set "limit" to nil' if limit.nil?
57
- @limit = limit
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] > @limit
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[0]
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 #{nxt}, starting from it...")
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: #{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 #{after}, setting the `latest` to it")
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 < @limit }
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
@@ -27,5 +27,5 @@
27
27
  # License:: MIT
28
28
  module Fbe
29
29
  # Current version of the gem (changed by .rultor.yml on every release)
30
- VERSION = '0.0.7'
30
+ VERSION = '0.0.9'
31
31
  end
@@ -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, 'judge-one', Loog::NULL) do
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(Fbe.fb, 'issue-was-opened', Loog::NULL) do
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(Fbe.fb, 'issue-was-closed', Loog::NULL) do
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
@@ -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
@@ -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($fb, Loog::NULL) do
41
+ Fbe.iterate(loog: Loog::NULL) do
42
42
  as 'labels-were-scanned'
43
43
  by '(agg (always) (max foo))'
44
- limit 2
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.7
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-05 00:00:00.000000000 Z
11
+ date: 2024-07-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace