fbe 0.0.35 → 0.0.36

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: da39ba8923cf39a674a0d5d6b465354eec2dc918780a266c67aad40848a78780
4
- data.tar.gz: e4a3182596fa8268796cd29a7aaeadc60b188d96cb8b9b79388a0b0bdee3dd67
3
+ metadata.gz: df35ffd71de34d881cd82c12282e4a27cf95b0ca4c409e8a4dd417aa15387d49
4
+ data.tar.gz: 0e499a83a4196d31c74b5b518f3f1c80c0319c08e09374c9fece8460c7a690ca
5
5
  SHA512:
6
- metadata.gz: 4f901025cd88965a8b5a344a50ee7c44d92693c53104c125f8c540c64b49878d36866e07b4555c277958868db69cabc0a3ef0e9dd27634dcceae72b6b339402e
7
- data.tar.gz: 06ed471547fcdec3c0fe2a09e5f268b67b7859a3a5edd91723da378ce758f01a08d4cb53dec82e4309069fb0b43618d945665afe5422228d6284b197206de87c
6
+ metadata.gz: 4caff409bad7c6c229b0148b5ae01e931cc925bad9c7f00ae355d64c328166ba8743a642f86fb58e8e7d190af2050f97e32060d31950fbc05f4b5d83dd181cd4
7
+ data.tar.gz: 45cfdb22a178282dc4597f5e282588fc4da46aea567b9b88900de2814a7577036c4431c97df6db05ce49dbe3ca03692241a2116687506856ba6b4a9a6ffd2433
data/.rubocop.yml CHANGED
@@ -58,3 +58,7 @@ Layout/EndOfLine:
58
58
  EnforcedStyle: lf
59
59
  Security/MarshalLoad:
60
60
  Enabled: false
61
+ Metrics/ParameterLists:
62
+ Enabled: false
63
+ Layout/MultilineAssignmentLayout:
64
+ Enabled: true
data/Gemfile CHANGED
@@ -27,7 +27,7 @@ gem 'minitest', '5.24.1', require: false
27
27
  gem 'minitest-reporters', '1.7.1', require: false
28
28
  gem 'rake', '13.2.1', require: false
29
29
  gem 'rspec-rails', '6.1.3', require: false
30
- gem 'rubocop', '1.65.0', require: false
30
+ gem 'rubocop', '1.65.1', require: false
31
31
  gem 'rubocop-performance', '1.21.1', require: false
32
32
  gem 'rubocop-rspec', '3.0.3', require: false
33
33
  gem 'simplecov', '0.22.0', require: false
data/Gemfile.lock CHANGED
@@ -150,7 +150,7 @@ GEM
150
150
  psych (5.1.2)
151
151
  stringio
152
152
  public_suffix (6.0.0)
153
- racc (1.8.0)
153
+ racc (1.8.1)
154
154
  rack (3.1.7)
155
155
  rack-session (2.0.0)
156
156
  rack (>= 3.0.0)
@@ -182,7 +182,7 @@ GEM
182
182
  reline (0.5.9)
183
183
  io-console (~> 0.5)
184
184
  retries (0.0.5)
185
- rexml (3.3.2)
185
+ rexml (3.3.4)
186
186
  strscan
187
187
  rspec-core (3.13.0)
188
188
  rspec-support (~> 3.13.0)
@@ -201,7 +201,7 @@ GEM
201
201
  rspec-mocks (~> 3.13)
202
202
  rspec-support (~> 3.13)
203
203
  rspec-support (3.13.1)
204
- rubocop (1.65.0)
204
+ rubocop (1.65.1)
205
205
  json (~> 2.3)
206
206
  language_server-protocol (>= 3.17.0)
207
207
  parallel (~> 1.10)
@@ -267,7 +267,7 @@ DEPENDENCIES
267
267
  minitest-reporters (= 1.7.1)
268
268
  rake (= 13.2.1)
269
269
  rspec-rails (= 6.1.3)
270
- rubocop (= 1.65.0)
270
+ rubocop (= 1.65.1)
271
271
  rubocop-performance (= 1.21.1)
272
272
  rubocop-rspec (= 3.0.3)
273
273
  simplecov (= 0.22.0)
data/lib/fbe/award.rb CHANGED
@@ -47,10 +47,17 @@ require 'factbase/syntax'
47
47
  # Copyright:: Copyright (c) 2024 Yegor Bugayenko
48
48
  # License:: MIT
49
49
  class Fbe::Award
50
- def initialize(query = J.pmp.hr.send($judge.gsub('-', '_')))
50
+ # Ctor.
51
+ # @param [String] query The query with the policy
52
+ # @param [String] judge The name of the judge
53
+ def initialize(query = nil, judge: $judge, global: $global, options: $options, loog: $loog)
54
+ query = Fbe.pmp(fb: Fbe.fb, global:, options:, loog:).hr.send(judge.gsub('-', '_')) if query.nil?
51
55
  @query = query
52
56
  end
53
57
 
58
+ # Build a bill object from this award query.
59
+ # @param [Hash] vars Hash of variables
60
+ # @return [Fbe::Award::Bill] The bill
54
61
  def bill(vars = {})
55
62
  term = Factbase::Syntax.new(@query, term: Fbe::Award::BTerm).to_term
56
63
  bill = Bill.new
@@ -59,6 +66,8 @@ class Fbe::Award
59
66
  bill
60
67
  end
61
68
 
69
+ # Build a policy object from this award query.
70
+ # @return [Fbe::Award::Policy] The policy
62
71
  def policy
63
72
  term = Factbase::Syntax.new(@query, term: Fbe::Award::PTerm).to_term
64
73
  policy = Policy.new
@@ -122,6 +131,12 @@ class Fbe::Award
122
131
  bill.points
123
132
  when :if
124
133
  to_val(@operands[0], bill) ? to_val(@operands[1], bill) : to_val(@operands[2], bill)
134
+ when :and
135
+ @operands.all? { |o| to_val(o, bill) }
136
+ when :or
137
+ @operands.any? { |o| to_val(o, bill) }
138
+ when :not
139
+ !to_val(@operands[0], bill)
125
140
  when :eq
126
141
  to_val(@operands[0], bill) == to_val(@operands[1], bill)
127
142
  when :lt
@@ -150,7 +165,6 @@ class Fbe::Award
150
165
  b = to_val(@operands[2], bill)
151
166
  min, max = [a, b].minmax
152
167
  return 0 if (!v.negative? && v < min) || (!v.positive? && v > max)
153
-
154
168
  v.clamp(min, max)
155
169
  else
156
170
  raise "Unknown term '#{@op}'"
@@ -171,6 +185,12 @@ class Fbe::Award
171
185
  'total'
172
186
  when :if
173
187
  "if #{to_p(@operands[0])} then #{to_p(@operands[1])} else #{to_p(@operands[2])}"
188
+ when :and
189
+ @operands.map(&:to_s).join(' and ')
190
+ when :or
191
+ @operands.map(&:to_s).join(' or ')
192
+ when :not
193
+ "not #{@operands[0]}"
174
194
  when :eq
175
195
  "#{to_p(@operands[0])} = #{to_p(@operands[1])}"
176
196
  when :lt
@@ -332,7 +352,7 @@ class Fbe::Award
332
352
  else
333
353
  pars += @lines.each_with_index.map { |t, i| "#{i.zero? ? 'First' : 'Then'}, #{t}." }
334
354
  end
335
- pars.join(' ').gsub('. Then, award ', ', and award ')
355
+ pars.join(' ').gsub('. Then, award ', ', and award ').gsub(/\s{2,}/, ' ')
336
356
  end
337
357
  end
338
358
  end
data/lib/fbe/fb.rb CHANGED
@@ -31,19 +31,21 @@ require 'factbase/rules'
31
31
  require_relative '../fbe'
32
32
 
33
33
  def Fbe.fb(fb: $fb, global: $global, options: $options, loog: $loog)
34
- global[:fb] ||= begin
35
- rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) }
36
- fbe = Factbase::Rules.new(
37
- fb,
38
- "(and \n#{rules.join("\n")}\n)",
39
- uid: '_id'
40
- )
41
- fbe = Factbase::Pre.new(fbe) do |f|
42
- max = fb.query('(eq _id (max _id))').each.to_a.first
43
- f._id = (max.nil? ? 0 : max._id) + 1
44
- f._time = Time.now
45
- f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{options.judges_action_version}"
34
+ global[:fb] ||=
35
+ begin
36
+ rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) }
37
+ fbe = Factbase::Rules.new(
38
+ fb,
39
+ "(and \n#{rules.join("\n")}\n)",
40
+ uid: '_id'
41
+ )
42
+ fbe =
43
+ Factbase::Pre.new(fbe) do |f|
44
+ max = fb.query('(eq _id (max _id))').each.to_a.first
45
+ f._id = (max.nil? ? 0 : max._id) + 1
46
+ f._time = Time.now
47
+ f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{options.judges_action_version}"
48
+ end
49
+ Factbase::Looged.new(fbe, loog)
46
50
  end
47
- Factbase::Looged.new(fbe, loog)
48
- end
49
51
  end
data/lib/fbe/if_absent.rb CHANGED
@@ -30,14 +30,15 @@ require_relative 'fb'
30
30
  # Injects a fact if it's absent in the factbase.
31
31
  def Fbe.if_absent(fb: Fbe.fb)
32
32
  attrs = {}
33
- f = others(map: attrs) do |*args|
34
- k = args[0]
35
- if k.end_with?('=')
36
- @map[k[0..-2].to_sym] = args[1]
37
- else
38
- @map[k.to_sym]
33
+ f =
34
+ others(map: attrs) do |*args|
35
+ k = args[0]
36
+ if k.end_with?('=')
37
+ @map[k[0..-2].to_sym] = args[1]
38
+ else
39
+ @map[k.to_sym]
40
+ end
39
41
  end
40
- end
41
42
  yield f
42
43
  q = attrs.except('_id', '_time', '_version').map do |k, v|
43
44
  vv = v.to_s
data/lib/fbe/octo.rb CHANGED
@@ -35,97 +35,99 @@ require_relative 'middleware/quota'
35
35
 
36
36
  def Fbe.octo(options: $options, global: $global, loog: $loog)
37
37
  raise 'The $global is not set' if global.nil?
38
- global[:octo] ||= begin
39
- if options.testing.nil?
40
- o = Octokit::Client.new
41
- token = options.github_token
42
- if token.nil?
43
- loog.debug("The 'github_token' option is not provided")
44
- token = ENV.fetch('GITHUB_TOKEN', nil)
38
+ global[:octo] ||=
39
+ begin
40
+ if options.testing.nil?
41
+ o = Octokit::Client.new
42
+ token = options.github_token
45
43
  if token.nil?
46
- loog.debug("The 'GITHUB_TOKEN' environment variable is not set")
44
+ loog.debug("The 'github_token' option is not provided")
45
+ token = ENV.fetch('GITHUB_TOKEN', nil)
46
+ if token.nil?
47
+ loog.debug("The 'GITHUB_TOKEN' environment variable is not set")
48
+ else
49
+ loog.debug("The 'GITHUB_TOKEN' environment was provided")
50
+ end
47
51
  else
48
- loog.debug("The 'GITHUB_TOKEN' environment was provided")
52
+ loog.debug("The 'github_token' option was provided")
49
53
  end
50
- else
51
- loog.debug("The 'github_token' option was provided")
52
- end
53
- if token.nil?
54
- loog.warn('Accessing GitHub API without a token!')
55
- elsif token.empty?
56
- loog.warn('The GitHub API token is an empty string, won\'t use it')
57
- else
58
- o = Octokit::Client.new(access_token: token)
59
- loog.info("Accessing GitHub API with a token (#{token.length} chars, ending by #{token[-4..]})")
60
- end
61
- o.auto_paginate = true
62
- o.per_page = 100
63
- o.connection_options = {
64
- request: {
65
- open_timeout: 15,
66
- timeout: 15
67
- }
68
- }
69
- stack = Faraday::RackBuilder.new do |builder|
70
- builder.use(
71
- Faraday::Retry::Middleware,
72
- exceptions: Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [
73
- Octokit::TooManyRequests, Octokit::ServiceUnavailable
74
- ],
75
- max: 4,
76
- interval: ENV['RACK_ENV'] == 'test' ? 0.01 : 4,
77
- methods: [:get],
78
- backoff_factor: 2
79
- )
80
- builder.use(
81
- Fbe::Middleware::Quota,
82
- logger: loog,
83
- pause: options.github_api_pause
84
- )
85
- builder.use(Faraday::HttpCache, serializer: Marshal, shared_cache: false, logger: Loog::NULL)
86
- builder.use(Octokit::Response::RaiseError)
87
- builder.use(Faraday::Response::Logger, Loog::NULL)
88
- builder.adapter(Faraday.default_adapter)
89
- end
90
- o.middleware = stack
91
- o = Verbose.new(o, log: loog)
92
- else
93
- loog.debug('The connection to GitHub API is mocked')
94
- o = Fbe::FakeOctokit.new
95
- end
96
- decoor(o, loog:) do
97
- def off_quota
98
- left = @origin.rate_limit.remaining
99
- if left < 5
100
- @loog.info("To much GitHub API quota consumed already (remaining=#{left}), stopping")
101
- true
54
+ if token.nil?
55
+ loog.warn('Accessing GitHub API without a token!')
56
+ elsif token.empty?
57
+ loog.warn('The GitHub API token is an empty string, won\'t use it')
102
58
  else
103
- false
59
+ o = Octokit::Client.new(access_token: token)
60
+ loog.info("Accessing GitHub API with a token (#{token.length} chars, ending by #{token[-4..]})")
104
61
  end
62
+ o.auto_paginate = true
63
+ o.per_page = 100
64
+ o.connection_options = {
65
+ request: {
66
+ open_timeout: 15,
67
+ timeout: 15
68
+ }
69
+ }
70
+ stack =
71
+ Faraday::RackBuilder.new do |builder|
72
+ builder.use(
73
+ Faraday::Retry::Middleware,
74
+ exceptions: Faraday::Retry::Middleware::DEFAULT_EXCEPTIONS + [
75
+ Octokit::TooManyRequests, Octokit::ServiceUnavailable
76
+ ],
77
+ max: 4,
78
+ interval: ENV['RACK_ENV'] == 'test' ? 0.01 : 4,
79
+ methods: [:get],
80
+ backoff_factor: 2
81
+ )
82
+ builder.use(
83
+ Fbe::Middleware::Quota,
84
+ logger: loog,
85
+ pause: options.github_api_pause
86
+ )
87
+ builder.use(Faraday::HttpCache, serializer: Marshal, shared_cache: false, logger: Loog::NULL)
88
+ builder.use(Octokit::Response::RaiseError)
89
+ builder.use(Faraday::Response::Logger, Loog::NULL)
90
+ builder.adapter(Faraday.default_adapter)
91
+ end
92
+ o.middleware = stack
93
+ o = Verbose.new(o, log: loog)
94
+ else
95
+ loog.debug('The connection to GitHub API is mocked')
96
+ o = Fbe::FakeOctokit.new
105
97
  end
98
+ decoor(o, loog:) do
99
+ def off_quota
100
+ left = @origin.rate_limit.remaining
101
+ if left < 5
102
+ @loog.info("To much GitHub API quota consumed already (remaining=#{left}), stopping")
103
+ true
104
+ else
105
+ false
106
+ end
107
+ end
106
108
 
107
- def user_name_by_id(id)
108
- json = @origin.user(id)
109
- name = json[:login]
110
- @loog.debug("GitHub user ##{id} has a name: @#{name}")
111
- name
112
- end
109
+ def user_name_by_id(id)
110
+ json = @origin.user(id)
111
+ name = json[:login]
112
+ @loog.debug("GitHub user ##{id} has a name: @#{name}")
113
+ name
114
+ end
113
115
 
114
- def repo_id_by_name(name)
115
- json = @origin.repository(name)
116
- id = json[:id]
117
- @loog.debug("GitHub repository #{name} has an ID: ##{id}")
118
- id
119
- end
116
+ def repo_id_by_name(name)
117
+ json = @origin.repository(name)
118
+ id = json[:id]
119
+ @loog.debug("GitHub repository #{name} has an ID: ##{id}")
120
+ id
121
+ end
120
122
 
121
- def repo_name_by_id(id)
122
- json = @origin.repository(id)
123
- name = json[:full_name]
124
- @loog.debug("GitHub repository ##{id} has a name: #{name}")
125
- name
123
+ def repo_name_by_id(id)
124
+ json = @origin.repository(id)
125
+ name = json[:full_name]
126
+ @loog.debug("GitHub repository ##{id} has a name: #{name}")
127
+ name
128
+ end
126
129
  end
127
130
  end
128
- end
129
131
  end
130
132
 
131
133
  # Fake GitHub client, for tests.
data/lib/fbe/pmp.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2024 Zerocracy
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+
25
+ require 'others'
26
+ require_relative 'fb'
27
+
28
+ # Project management functions.
29
+ module Fbe; end
30
+
31
+ def Fbe.pmp(fb: Fbe.fb, global: $global, options: $options, loog: $loog)
32
+ others do |*args1|
33
+ area = args1.first
34
+ others do |*args2|
35
+ param = args2.first
36
+ f = Fbe.fb(global:, fb:, options:, loog:).query("(and (eq what 'pmp') (eq area '#{area}'))").each.to_a.first
37
+ raise "Unknown area '#{area}'" if f.nil?
38
+ r = f[param]
39
+ raise "Unknown property '#{param}' in the '#{area}' area" if r.nil?
40
+ r.first
41
+ end
42
+ end
43
+ 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.35'
30
+ VERSION = '0.0.36'
31
31
  end
@@ -42,7 +42,12 @@ class TestAward < Minitest::Test
42
42
  (give basis "as a basis")
43
43
  (let fee 10)
44
44
  (aka
45
- (set b1 (if (lt hours max) fee 0))
45
+ (set b1
46
+ (if
47
+ (and
48
+ (lt hours max)
49
+ (not (eq hours 0)))
50
+ fee 0))
46
51
  (give b1 "for resolving the bug in ${hours} (<${max}) hours")
47
52
  "add ${+fee} if it was resolved in less than ${max} hours")
48
53
  (set days (div hours 24))
@@ -38,9 +38,10 @@ class TestIfAbsent < Minitest::Test
38
38
  def test_ignores
39
39
  fb = Factbase.new
40
40
  fb.insert.foo = 'hello dude'
41
- n = Fbe.if_absent(fb:) do |f|
42
- f.foo = 'hello dude'
43
- end
41
+ n =
42
+ Fbe.if_absent(fb:) do |f|
43
+ f.foo = 'hello dude'
44
+ end
44
45
  assert(n.nil?)
45
46
  end
46
47
 
@@ -48,17 +49,19 @@ class TestIfAbsent < Minitest::Test
48
49
  fb = Factbase.new
49
50
  t = Time.now
50
51
  fb.insert.foo = t
51
- n = Fbe.if_absent(fb:) do |f|
52
- f.foo = t
53
- end
52
+ n =
53
+ Fbe.if_absent(fb:) do |f|
54
+ f.foo = t
55
+ end
54
56
  assert(n.nil?)
55
57
  end
56
58
 
57
59
  def test_injects
58
60
  fb = Factbase.new
59
- n = Fbe.if_absent(fb:) do |f|
60
- f.foo = 42
61
- end
61
+ n =
62
+ Fbe.if_absent(fb:) do |f|
63
+ f.foo = 42
64
+ end
62
65
  assert_equal(42, n.foo)
63
66
  end
64
67
 
@@ -77,12 +80,13 @@ class TestIfAbsent < Minitest::Test
77
80
  t = Time.now
78
81
  f1.z = t
79
82
  f1.bar = 3.14
80
- n = Fbe.if_absent(fb:) do |f|
81
- f.foo = 'hello, "dude"!'
82
- f.abc = 42
83
- f.z = t
84
- f.bar = 3.14
85
- end
83
+ n =
84
+ Fbe.if_absent(fb:) do |f|
85
+ f.foo = 'hello, "dude"!'
86
+ f.abc = 42
87
+ f.z = t
88
+ f.bar = 3.14
89
+ end
86
90
  assert(n.nil?)
87
91
  end
88
92
 
@@ -94,12 +98,13 @@ class TestIfAbsent < Minitest::Test
94
98
  t = Time.now
95
99
  f1.z = t
96
100
  f1.bar = 3.14
97
- n = Fbe.if_absent(fb:) do |f|
98
- f.foo = "hello, \\\"dude\\\" \\' \\' ( \n\n ) (! '"
99
- f.abc = 42
100
- f.z = t + 1
101
- f.bar = 3.15
102
- end
101
+ n =
102
+ Fbe.if_absent(fb:) do |f|
103
+ f.foo = "hello, \\\"dude\\\" \\' \\' ( \n\n ) (! '"
104
+ f.abc = 42
105
+ f.z = t + 1
106
+ f.bar = 3.15
107
+ end
103
108
  assert(!n.nil?)
104
109
  end
105
110
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ # MIT License
4
+ #
5
+ # Copyright (c) 2024 Zerocracy
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
8
+ # of this software and associated documentation files (the "Software"), to deal
9
+ # in the Software without restriction, including without limitation the rights
10
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11
+ # copies of the Software, and to permit persons to whom the Software is
12
+ # furnished to do so, subject to the following conditions:
13
+ #
14
+ # The above copyright notice and this permission notice shall be included in all
15
+ # copies or substantial portions of the Software.
16
+ #
17
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23
+ # SOFTWARE.
24
+
25
+ require 'minitest/autorun'
26
+ require 'judges/options'
27
+ require 'loog'
28
+ require 'factbase'
29
+ require_relative '../test__helper'
30
+ require_relative '../../lib/fbe/pmp'
31
+
32
+ # Test.
33
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
34
+ # Copyright:: Copyright (c) 2024 Zerocracy
35
+ # License:: MIT
36
+ class TestPmp < Minitest::Test
37
+ def test_defaults
38
+ $fb = Factbase.new
39
+ $global = {}
40
+ $options = Judges::Options.new
41
+ f = Fbe.fb(loog: Loog::NULL).insert
42
+ f.what = 'pmp'
43
+ f.area = 'hr'
44
+ f.days_to_reward = 55
45
+ $loog = Loog::NULL
46
+ assert_equal(55, Fbe.pmp(loog: Loog::NULL).hr.days_to_reward)
47
+ end
48
+
49
+ def test_fail_on_wrong_area
50
+ $global = {}
51
+ $loog = Loog::NULL
52
+ assert_raises { Fbe.pmp(Factbase.new, loog: Loog::NULL).something }
53
+ end
54
+ end
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.35
4
+ version: 0.0.36
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-31 00:00:00.000000000 Z
11
+ date: 2024-08-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace
@@ -233,6 +233,7 @@ files:
233
233
  - lib/fbe/middleware.rb
234
234
  - lib/fbe/middleware/quota.rb
235
235
  - lib/fbe/octo.rb
236
+ - lib/fbe/pmp.rb
236
237
  - lib/fbe/sec.rb
237
238
  - lib/fbe/unmask_repos.rb
238
239
  - lib/fbe/who.rb
@@ -246,6 +247,7 @@ files:
246
247
  - test/fbe/test_issue.rb
247
248
  - test/fbe/test_iterate.rb
248
249
  - test/fbe/test_octo.rb
250
+ - test/fbe/test_pmp.rb
249
251
  - test/fbe/test_sec.rb
250
252
  - test/fbe/test_unmask_repos.rb
251
253
  - test/fbe/test_who.rb