fbe 0.17.0 → 0.19.0

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: 7f70d456f08cfacd13990d45fd62834c1856260dd096583909fe4aa2b113f080
4
- data.tar.gz: edd2a32689116bf7ae2940458f2e77cf6d33027097e3a01985af685d78f666b4
3
+ metadata.gz: ca1e12a4b07ce8d4fa15ce2d92d8eed98fe9e34bcf7024106610fd8558c67c18
4
+ data.tar.gz: e3c30f1281c87d569ae69b966a35d9ec05813890fca0b0ede639b416e4beb7b8
5
5
  SHA512:
6
- metadata.gz: 5a5371878121330954776a6fc2d7cc32ef4207afd7c6e73b8ac4399c6af222abbfda3afd7d2636eadb7bf3f305984ed547d755666e02d38d3a54c0479c289e15
7
- data.tar.gz: 76cf0627e9c1bd78b9ad1e348ff5c6fce2f0c9e8374d2a0b09ae93c1b4faa27b240446f30abb1fb7821bcf5c18b5bd118b7f54d3615843773ebe3b1edcbca4c8
6
+ metadata.gz: 117de890b3d5d5abfa0fff5a0c8da8b1681618c8c2726fa7cc248fa28321e90752500d83f005583a9cb886624a135386f7379c7f529c1da6205b274888ee6d5e
7
+ data.tar.gz: 3db7a0b6b6a3a19fff7fb475ca372ad501de9031c4ec0d984e4ffcb0f95d81d83fc7840fe11df4464ea7c920d229e7ccc3dfc6f7099c7d9801559cb89b4a7569
data/Gemfile CHANGED
@@ -7,16 +7,16 @@ source 'https://rubygems.org'
7
7
  gemspec
8
8
 
9
9
  gem 'minitest', '~>5.25', require: false
10
- gem 'minitest-reporters', '>=1.7', require: false
11
- gem 'os', '>0', require: false
12
- gem 'qbash', '>0', require: false
13
- gem 'rake', '>=13', require: false
10
+ gem 'minitest-reporters', '~>1.7', require: false
11
+ gem 'os', '~>1.1', require: false
12
+ gem 'qbash', '~>0.4', require: false
13
+ gem 'rake', '~>13.3', require: false
14
14
  gem 'rubocop', '~>1.75', require: false
15
- gem 'rubocop-minitest', '>0', require: false
16
- gem 'rubocop-performance', '>0', require: false
17
- gem 'rubocop-rake', '>0', require: false
15
+ gem 'rubocop-minitest', '~>0.38', require: false
16
+ gem 'rubocop-performance', '~>1.25', require: false
17
+ gem 'rubocop-rake', '~>0.7', require: false
18
18
  gem 'simplecov', '~>0.22', require: false
19
19
  gem 'simplecov-cobertura', '~>2.1', require: false
20
- gem 'veils', '>0', require: false
20
+ gem 'veils', '~>0.4', require: false
21
21
  gem 'webmock', '~>3.25', require: false
22
22
  gem 'yard', '~>0.9', require: false
data/Gemfile.lock CHANGED
@@ -2,23 +2,24 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  fbe (0.0.0)
5
- backtrace (> 0)
6
- baza.rb (> 0)
7
- decoor (> 0)
8
- factbase (>= 0.9.3)
5
+ backtrace (~> 0.4)
6
+ baza.rb (~> 0.5)
7
+ decoor (~> 0.0)
8
+ factbase (~> 0.11)
9
9
  faraday (~> 2.0)
10
- faraday-http-cache (~> 2.0)
11
- faraday-multipart (~> 1.0)
12
- faraday-retry (~> 2.0)
13
- graphql-client (~> 0.0)
14
- judges (> 0)
10
+ faraday-http-cache (~> 2.5)
11
+ faraday-multipart (~> 1.1)
12
+ faraday-retry (~> 2.3)
13
+ graphql-client (~> 0.26)
14
+ judges (~> 0.46)
15
15
  liquid (~> 5.5)
16
- loog (> 0)
17
- obk (> 0)
16
+ loog (~> 0.6)
17
+ obk (~> 0.3)
18
18
  octokit (~> 10.0)
19
- others (> 0)
20
- tago (> 0)
21
- verbose (> 0)
19
+ others (~> 0.0)
20
+ sqlite3 (~> 2.6)
21
+ tago (~> 0.1)
22
+ verbose (~> 0.0)
22
23
 
23
24
  GEM
24
25
  remote: https://rubygems.org/
@@ -40,9 +41,9 @@ GEM
40
41
  public_suffix (>= 2.0.2, < 7.0)
41
42
  ansi (1.5.0)
42
43
  ast (2.4.3)
43
- backtrace (0.4.0)
44
+ backtrace (0.4.1)
44
45
  base64 (0.3.0)
45
- baza.rb (0.5.0)
46
+ baza.rb (0.5.1)
46
47
  backtrace (> 0)
47
48
  elapsed (> 0)
48
49
  faraday (> 0)
@@ -55,7 +56,7 @@ GEM
55
56
  tago (~> 0)
56
57
  typhoeus (~> 1.3)
57
58
  benchmark (0.4.1)
58
- bigdecimal (3.2.1)
59
+ bigdecimal (3.2.2)
59
60
  builder (3.3.0)
60
61
  concurrent-ruby (1.3.5)
61
62
  connection_pool (2.5.3)
@@ -99,7 +100,7 @@ GEM
99
100
  fiber-storage (1.0.1)
100
101
  gli (2.22.2)
101
102
  ostruct
102
- graphql (2.5.8)
103
+ graphql (2.5.9)
103
104
  base64
104
105
  fiber-storage
105
106
  logger
@@ -111,22 +112,22 @@ GEM
111
112
  concurrent-ruby (~> 1.0)
112
113
  iri (0.11.2)
113
114
  json (2.12.2)
114
- judges (0.45.0)
115
- backtrace (~> 0)
116
- baza.rb (~> 0)
115
+ judges (0.46.0)
116
+ backtrace (~> 0.4)
117
+ baza.rb (~> 0.5)
117
118
  concurrent-ruby (~> 1.2)
118
- elapsed (~> 0)
119
- factbase (~> 0.9)
119
+ elapsed (~> 0.0)
120
+ factbase (~> 0.11)
120
121
  gli (~> 2.21)
121
- iri (~> 0)
122
- loog (~> 0)
122
+ iri (~> 0.11)
123
+ loog (~> 0.6)
123
124
  moments (~> 0.3)
124
125
  nokogiri (~> 1.10)
125
- others (~> 0)
126
- retries (~> 0)
127
- tago (~> 0)
128
- timeout (~> 0)
129
- total (~> 0)
126
+ others (~> 0.0)
127
+ retries (~> 0.0)
128
+ tago (~> 0.1)
129
+ timeout (~> 0.4)
130
+ total (~> 0.4)
130
131
  typhoeus (~> 1.3)
131
132
  language_server-protocol (3.17.0.5)
132
133
  lint_roller (1.1.0)
@@ -178,7 +179,7 @@ GEM
178
179
  regexp_parser (2.10.0)
179
180
  retries (0.0.5)
180
181
  rexml (3.4.1)
181
- rubocop (1.75.8)
182
+ rubocop (1.76.0)
182
183
  json (~> 2.3)
183
184
  language_server-protocol (~> 3.17.0.2)
184
185
  lint_roller (~> 1.1.0)
@@ -186,10 +187,10 @@ GEM
186
187
  parser (>= 3.3.0.2)
187
188
  rainbow (>= 2.2.2, < 4.0)
188
189
  regexp_parser (>= 2.9.3, < 3.0)
189
- rubocop-ast (>= 1.44.0, < 2.0)
190
+ rubocop-ast (>= 1.45.0, < 2.0)
190
191
  ruby-progressbar (~> 1.7)
191
192
  unicode-display_width (>= 2.4.0, < 4.0)
192
- rubocop-ast (1.44.1)
193
+ rubocop-ast (1.45.0)
193
194
  parser (>= 3.3.7.2)
194
195
  prism (~> 1.4)
195
196
  rubocop-minitest (0.38.1)
@@ -217,6 +218,10 @@ GEM
217
218
  simplecov (~> 0.19)
218
219
  simplecov-html (0.13.1)
219
220
  simplecov_json_formatter (0.1.4)
221
+ sqlite3 (2.6.0-arm64-darwin)
222
+ sqlite3 (2.6.0-x64-mingw-ucrt)
223
+ sqlite3 (2.6.0-x86_64-darwin)
224
+ sqlite3 (2.6.0-x86_64-linux-gnu)
220
225
  strscan (3.1.5)
221
226
  tago (0.1.0)
222
227
  timeout (0.4.3)
@@ -252,17 +257,17 @@ PLATFORMS
252
257
  DEPENDENCIES
253
258
  fbe!
254
259
  minitest (~> 5.25)
255
- minitest-reporters (>= 1.7)
256
- os (> 0)
257
- qbash (> 0)
258
- rake (>= 13)
260
+ minitest-reporters (~> 1.7)
261
+ os (~> 1.1)
262
+ qbash (~> 0.4)
263
+ rake (~> 13.3)
259
264
  rubocop (~> 1.75)
260
- rubocop-minitest (> 0)
261
- rubocop-performance (> 0)
262
- rubocop-rake (> 0)
265
+ rubocop-minitest (~> 0.38)
266
+ rubocop-performance (~> 1.25)
267
+ rubocop-rake (~> 0.7)
263
268
  simplecov (~> 0.22)
264
269
  simplecov-cobertura (~> 2.1)
265
- veils (> 0)
270
+ veils (~> 0.4)
266
271
  webmock (~> 3.25)
267
272
  yard (~> 0.9)
268
273
 
data/fbe.gemspec CHANGED
@@ -22,22 +22,23 @@ Gem::Specification.new do |s|
22
22
  s.files = `git ls-files`.split($RS)
23
23
  s.rdoc_options = ['--charset=UTF-8']
24
24
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
25
- s.add_dependency 'backtrace', '>0'
26
- s.add_dependency 'baza.rb', '>0'
27
- s.add_dependency 'decoor', '>0'
28
- s.add_dependency 'factbase', '>=0.9.3'
25
+ s.add_dependency 'backtrace', '~>0.4'
26
+ s.add_dependency 'baza.rb', '~>0.5'
27
+ s.add_dependency 'decoor', '~>0.0'
28
+ s.add_dependency 'factbase', '~>0.11'
29
29
  s.add_dependency 'faraday', '~>2.0'
30
- s.add_dependency 'faraday-http-cache', '~>2.0'
31
- s.add_dependency 'faraday-multipart', '~>1.0'
32
- s.add_dependency 'faraday-retry', '~>2.0'
33
- s.add_dependency 'graphql-client', '~>0.0'
34
- s.add_dependency 'judges', '>0'
30
+ s.add_dependency 'faraday-http-cache', '~>2.5'
31
+ s.add_dependency 'faraday-multipart', '~>1.1'
32
+ s.add_dependency 'faraday-retry', '~>2.3'
33
+ s.add_dependency 'graphql-client', '~>0.26'
34
+ s.add_dependency 'judges', '~>0.46'
35
35
  s.add_dependency 'liquid', '~>5.5'
36
- s.add_dependency 'loog', '>0'
37
- s.add_dependency 'obk', '>0'
36
+ s.add_dependency 'loog', '~>0.6'
37
+ s.add_dependency 'obk', '~>0.3'
38
38
  s.add_dependency 'octokit', '~>10.0'
39
- s.add_dependency 'others', '>0'
40
- s.add_dependency 'tago', '>0'
41
- s.add_dependency 'verbose', '>0'
39
+ s.add_dependency 'others', '~>0.0'
40
+ s.add_dependency 'sqlite3', '~> 2.6'
41
+ s.add_dependency 'tago', '~>0.1'
42
+ s.add_dependency 'verbose', '~>0.0'
42
43
  s.metadata['rubygems_mfa_required'] = 'true'
43
44
  end
data/lib/fbe/conclude.rb CHANGED
@@ -184,7 +184,7 @@ class Fbe::Conclude
184
184
  oct = Fbe.octo(loog: @loog, options: @options, global: @global)
185
185
  @fb.txn do |fbt|
186
186
  fbt.query(@query).each do |a|
187
- if @quota_aware && oct.off_quota
187
+ if @quota_aware && oct.off_quota?
188
188
  @loog.debug('We ran out of GitHub quota, must stop here')
189
189
  throw :commit
190
190
  end
data/lib/fbe/iterate.rb CHANGED
@@ -199,7 +199,7 @@ class Fbe::Iterate
199
199
  raise 'Use "by" first' if @query.nil?
200
200
  seen = {}
201
201
  oct = Fbe.octo(loog: @loog, options: @options, global: @global)
202
- if oct.off_quota
202
+ if oct.off_quota?
203
203
  @loog.debug('We are off GitHub quota, cannot even start, sorry')
204
204
  return
205
205
  end
@@ -207,12 +207,12 @@ class Fbe::Iterate
207
207
  restarted = []
208
208
  start = Time.now
209
209
  loop do
210
- if oct.off_quota
210
+ if oct.off_quota?
211
211
  @loog.info("We are off GitHub quota, time to stop after #{start.ago}")
212
212
  break
213
213
  end
214
214
  repos.each do |repo|
215
- if oct.off_quota
215
+ if oct.off_quota?
216
216
  @loog.debug("We are off GitHub quota, we must skip #{repo}")
217
217
  break
218
218
  end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
5
+
6
+ require 'json'
7
+ require 'sqlite3'
8
+ require_relative '../../fbe'
9
+ require_relative '../../fbe/middleware'
10
+
11
+ # Persisted SQLite store for Faraday::HttpCache
12
+ #
13
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
14
+ # Copyright:: Copyright (c) 2024-2025 Zerocracy
15
+ # License:: MIT
16
+ class Fbe::Middleware::SqliteStore
17
+ def initialize(path)
18
+ raise ArgumentError, 'Database path cannot be nil or empty' if path.nil? || path.empty?
19
+ dir = File.dirname(path)
20
+ raise ArgumentError, "Directory #{dir} does not exist" unless File.directory?(dir)
21
+ @path = path
22
+ open
23
+ prepare
24
+ at_exit { close }
25
+ end
26
+
27
+ def read(key)
28
+ value = perform { _1.execute('SELECT value FROM cache WHERE key = ? LIMIT 1', [key]) }.dig(0, 0)
29
+ JSON.parse(value) if value
30
+ end
31
+
32
+ def delete(key)
33
+ perform { _1.execute('DELETE FROM cache WHERE key = ?', [key]) }
34
+ nil
35
+ end
36
+
37
+ def write(key, value)
38
+ value = JSON.dump(value)
39
+ perform do |tdb|
40
+ tdb.execute(<<~SQL, [key, value])
41
+ INSERT INTO cache(key, value) VALUES(?1, ?2)
42
+ ON CONFLICT(key) DO UPDATE SET value = ?2
43
+ SQL
44
+ end
45
+ nil
46
+ end
47
+
48
+ def open
49
+ return if @db
50
+ @db = SQLite3::Database.new(@path)
51
+ end
52
+
53
+ def prepare
54
+ perform do |tdb|
55
+ tdb.execute 'CREATE TABLE IF NOT EXISTS cache(key TEXT UNIQUE NOT NULL, value TEXT);'
56
+ tdb.execute 'CREATE INDEX IF NOT EXISTS key_idx ON cache(key);'
57
+ end
58
+ end
59
+
60
+ def close
61
+ return if !@db || @db.closed?
62
+ @db.close
63
+ @db = nil
64
+ end
65
+
66
+ def clear
67
+ perform { _1.execute 'DELETE FROM cache;' }
68
+ end
69
+
70
+ def drop
71
+ perform { _1.execute 'DROP TABLE IF EXISTS cache;' }
72
+ end
73
+
74
+ def all
75
+ perform { _1.execute('SELECT key, value FROM cache') }
76
+ end
77
+
78
+ private
79
+
80
+ def perform(&)
81
+ @db.transaction(&)
82
+ end
83
+ end
data/lib/fbe/octo.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
+ require 'json'
6
7
  require 'decoor'
7
8
  require 'faraday/http_cache'
8
9
  require 'faraday/retry'
@@ -15,6 +16,7 @@ require_relative '../fbe'
15
16
  require_relative 'middleware'
16
17
  require_relative 'middleware/formatter'
17
18
  require_relative 'middleware/trace'
19
+ require_relative 'middleware/sqlite_store'
18
20
 
19
21
  # Makes a call to the GitHub API.
20
22
  #
@@ -78,7 +80,15 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
78
80
  methods: [:get],
79
81
  backoff_factor: 2
80
82
  )
81
- builder.use(Faraday::HttpCache, serializer: Marshal, shared_cache: false, logger: Loog::NULL)
83
+ serializer = Marshal
84
+ if options.sqlite_cache
85
+ store = Fbe::Middleware::SqliteStore.new(options.sqlite_cache)
86
+ serializer = JSON
87
+ end
88
+ builder.use(
89
+ Faraday::HttpCache,
90
+ store: store, serializer: serializer, shared_cache: false, logger: Loog::NULL
91
+ )
82
92
  builder.use(Octokit::Response::RaiseError)
83
93
  builder.use(Faraday::Response::Logger, loog, formatter: Fbe::Middleware::Formatter)
84
94
  builder.use(Fbe::Middleware::Trace, trace)
@@ -109,7 +119,7 @@ def Fbe.octo(options: $options, global: $global, loog: $loog)
109
119
  end
110
120
  end
111
121
 
112
- def off_quota(threshold: 50)
122
+ def off_quota?(threshold: 50)
113
123
  left = @origin.rate_limit.remaining
114
124
  if left < threshold
115
125
  @loog.info("Too much GitHub API quota consumed already (#{left} < #{threshold}), stopping")
@@ -382,9 +392,11 @@ class Fbe::FakeOctokit
382
392
  # @example
383
393
  # fake_client = Fbe::FakeOctokit.new
384
394
  # fake_client.remove_organization_membership('zerocracy') #=> true
395
+ # rubocop:disable Naming/PredicateMethod
385
396
  def remove_organization_membership(_org, _user = nil)
386
397
  true
387
398
  end
399
+ # rubocop:enable Naming/PredicateMethod
388
400
 
389
401
  # Accepts a repository invitation.
390
402
  #
@@ -393,10 +405,12 @@ class Fbe::FakeOctokit
393
405
  # @example
394
406
  # fake_client = Fbe::FakeOctokit.new
395
407
  # fake_client.accept_repository_invitation(1) #=> true
408
+ # rubocop:disable Naming/PredicateMethod
396
409
  def accept_repository_invitation(id)
397
410
  raise Octokit::NotFound if id == 404_000
398
411
  true
399
412
  end
413
+ # rubocop:enable Naming/PredicateMethod
400
414
 
401
415
  # Gives a star to a repository.
402
416
  #
@@ -405,9 +419,11 @@ class Fbe::FakeOctokit
405
419
  # @example
406
420
  # fake_client = Fbe::FakeOctokit.new
407
421
  # fake_client.star('octocat/Hello-World') #=> true
422
+ # rubocop:disable Naming/PredicateMethod
408
423
  def star(_repo)
409
424
  true
410
425
  end
426
+ # rubocop:enable Naming/PredicateMethod
411
427
 
412
428
  # Gets details of a GitHub user.
413
429
  #
data/lib/fbe.rb CHANGED
@@ -10,5 +10,5 @@
10
10
  # License:: MIT
11
11
  module Fbe
12
12
  # Current version of the gem (changed by +.rultor.yml+ on every release)
13
- VERSION = '0.17.0' unless const_defined?(:VERSION)
13
+ VERSION = '0.19.0' unless const_defined?(:VERSION)
14
14
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
+ # SPDX-License-Identifier: MIT
5
+
6
+ require_relative '../../test__helper'
7
+ require_relative '../../../lib/fbe/middleware'
8
+ require_relative '../../../lib/fbe/middleware/sqlite_store'
9
+
10
+ # Test.
11
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
12
+ # Copyright:: Copyright (c) 2024-2025 Zerocracy
13
+ # License:: MIT
14
+ class SqliteStoreTest < Fbe::Test
15
+ def test_sqlite_store
16
+ Dir.mktmpdir do |dir|
17
+ store = Fbe::Middleware::SqliteStore.new(File.expand_path('test.db', dir))
18
+ assert_nil(store.read('my_key'))
19
+ assert_nil(store.delete('my_key'))
20
+ assert_nil(store.write('my_key', 'some value'))
21
+ assert_equal('some value', store.read('my_key'))
22
+ assert_nil(store.write('my_key', 'some value 2'))
23
+ assert_equal('some value 2', store.read('my_key'))
24
+ assert_nil(store.delete('my_key'))
25
+ assert_nil(store.read('my_key'))
26
+ end
27
+ end
28
+
29
+ def test_sqlite_store_empty_all
30
+ Dir.mktmpdir do |dir|
31
+ store = Fbe::Middleware::SqliteStore.new(File.expand_path('test.db', dir))
32
+ assert_empty(store.all)
33
+ end
34
+ end
35
+ end
data/test/fbe/test_fb.rb CHANGED
@@ -27,6 +27,28 @@ class TestFb < Fbe::Test
27
27
  assert_includes(stdout, 'Inserted new fact #1', stdout)
28
28
  end
29
29
 
30
+ def test_defends_against_improper_facts
31
+ $fb = Factbase.new
32
+ $global = {}
33
+ $options = Judges::Options.new
34
+ $loog = Loog::Buffer.new
35
+ assert_raises(StandardError, 'issue without repository') do
36
+ Fbe.fb.txn do |fbt|
37
+ f = fbt.insert
38
+ f.what = 'issue-was-opened'
39
+ f.issue = 42
40
+ f.where = 'github'
41
+ end
42
+ end
43
+ assert_raises(StandardError, 'repository without where') do
44
+ Fbe.fb.txn do |fbt|
45
+ f = fbt.insert
46
+ f.what = 'issue-was-opened'
47
+ f.repository = 44
48
+ end
49
+ end
50
+ end
51
+
30
52
  def test_increment_id_in_transaction
31
53
  $fb = Factbase.new
32
54
  $global = {}
@@ -18,7 +18,7 @@ class TestOcto < Fbe::Test
18
18
  global = {}
19
19
  options = Judges::Options.new({ 'testing' => true })
20
20
  o = Fbe.octo(loog: Loog::NULL, global:, options:)
21
- refute(o.off_quota)
21
+ refute_predicate(o, :off_quota?)
22
22
  refute_nil(o.pull_request('foo/foo', 42))
23
23
  refute_nil(o.commit_pulls('foo/foo', 'sha'))
24
24
  end
@@ -101,7 +101,7 @@ class TestOcto < Fbe::Test
101
101
  assert_equal(4, o.rate_limit.remaining)
102
102
  end
103
103
 
104
- def test_off_quota
104
+ def test_off_quota?
105
105
  WebMock.disable_net_connect!
106
106
  stub_request(:get, 'https://api.github.com/rate_limit').to_return(
107
107
  body: '{}', headers: { 'X-RateLimit-Remaining' => '333' }
@@ -110,9 +110,9 @@ class TestOcto < Fbe::Test
110
110
  body: '', headers: { 'X-RateLimit-Remaining' => '3' }
111
111
  )
112
112
  o = Fbe.octo(loog: Loog::NULL, global: {}, options: Judges::Options.new)
113
- refute(o.off_quota)
113
+ refute_predicate(o, :off_quota?)
114
114
  o.user(42)
115
- assert(o.off_quota)
115
+ assert_predicate(o, :off_quota?)
116
116
  end
117
117
 
118
118
  def test_off_quota_twice
@@ -125,11 +125,11 @@ class TestOcto < Fbe::Test
125
125
  { body: '', headers: { 'X-RateLimit-Remaining' => '5' } }
126
126
  )
127
127
  o = Fbe.octo(loog: Loog::VERBOSE, global: {}, options: Judges::Options.new)
128
- refute(o.off_quota)
128
+ refute_predicate(o, :off_quota?)
129
129
  o.user(42)
130
- refute(o.off_quota)
130
+ refute_predicate(o, :off_quota?)
131
131
  o.user(42)
132
- assert(o.off_quota)
132
+ assert_predicate(o, :off_quota?)
133
133
  end
134
134
 
135
135
  def test_print_quota_left_while_initialize
@@ -216,9 +216,9 @@ class TestOcto < Fbe::Test
216
216
  headers: { 'x-ratelimit-remaining' => '10000' }
217
217
  )
218
218
  o.user('foo')
219
- assert(o.off_quota)
219
+ assert_predicate(o, :off_quota?)
220
220
  o.user('foo')
221
- refute(o.off_quota)
221
+ refute_predicate(o, :off_quota?)
222
222
  end
223
223
 
224
224
  def test_fetches_fake_check_runs_for_ref
@@ -260,7 +260,7 @@ class TestOcto < Fbe::Test
260
260
  def test_reads_quota
261
261
  WebMock.enable_net_connect!
262
262
  o = Fbe.octo(loog: Loog::VERBOSE, global: {}, options: Judges::Options.new({ 'github_api_pause' => 0.01 }))
263
- refute_nil(o.off_quota)
263
+ refute_nil(o.off_quota?)
264
264
  end
265
265
 
266
266
  def test_fetches_fake_not_found_users
@@ -366,4 +366,28 @@ class TestOcto < Fbe::Test
366
366
  second_output = second_loog.to_s
367
367
  assert_includes second_output, 'GitHub API trace is empty'
368
368
  end
369
+
370
+ def test_sqlite_store
371
+ WebMock.disable_net_connect!
372
+ Dir.mktmpdir do |dir|
373
+ global = {}
374
+ sqlite_cache = File.expand_path('test.db', dir)
375
+ o = Fbe.octo(loog: Loog::NULL, global:, options: Judges::Options.new({ 'sqlite_cache' => sqlite_cache }))
376
+ stub = stub_request(:get, 'https://api.github.com/user/42').to_return(
377
+ status: 200,
378
+ body: { login: 'user1' }.to_json,
379
+ headers: {
380
+ 'Content-Type' => 'application/json',
381
+ 'Cache-Control' => 'public, max-age=60, s-maxage=60',
382
+ 'Etag' => 'W/"2ff9dd4c3153f006830b2b8b721f6a4bb400a1eb81a2e1fa0a3b846ad349b9ec"',
383
+ 'Last-Modified' => 'Wed, 01 May 2025 20:00:00 GMT'
384
+ }
385
+ )
386
+ assert_equal('user1', o.user_name_by_id(42))
387
+ WebMock.remove_request_stub(stub)
388
+ global = {}
389
+ o = Fbe.octo(loog: Loog::NULL, global:, options: Judges::Options.new({ 'sqlite_cache' => sqlite_cache }))
390
+ assert_equal('user1', o.user_name_by_id(42))
391
+ end
392
+ end
369
393
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fbe
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.19.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -13,58 +13,58 @@ dependencies:
13
13
  name: backtrace
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - ">"
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '0'
18
+ version: '0.4'
19
19
  type: :runtime
20
20
  prerelease: false
21
21
  version_requirements: !ruby/object:Gem::Requirement
22
22
  requirements:
23
- - - ">"
23
+ - - "~>"
24
24
  - !ruby/object:Gem::Version
25
- version: '0'
25
+ version: '0.4'
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: baza.rb
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
30
- - - ">"
30
+ - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0'
32
+ version: '0.5'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - ">"
37
+ - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0'
39
+ version: '0.5'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: decoor
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
- - - ">"
44
+ - - "~>"
45
45
  - !ruby/object:Gem::Version
46
- version: '0'
46
+ version: '0.0'
47
47
  type: :runtime
48
48
  prerelease: false
49
49
  version_requirements: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - ">"
51
+ - - "~>"
52
52
  - !ruby/object:Gem::Version
53
- version: '0'
53
+ version: '0.0'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: factbase
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - ">="
58
+ - - "~>"
59
59
  - !ruby/object:Gem::Version
60
- version: 0.9.3
60
+ version: '0.11'
61
61
  type: :runtime
62
62
  prerelease: false
63
63
  version_requirements: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - ">="
65
+ - - "~>"
66
66
  - !ruby/object:Gem::Version
67
- version: 0.9.3
67
+ version: '0.11'
68
68
  - !ruby/object:Gem::Dependency
69
69
  name: faraday
70
70
  requirement: !ruby/object:Gem::Requirement
@@ -85,70 +85,70 @@ dependencies:
85
85
  requirements:
86
86
  - - "~>"
87
87
  - !ruby/object:Gem::Version
88
- version: '2.0'
88
+ version: '2.5'
89
89
  type: :runtime
90
90
  prerelease: false
91
91
  version_requirements: !ruby/object:Gem::Requirement
92
92
  requirements:
93
93
  - - "~>"
94
94
  - !ruby/object:Gem::Version
95
- version: '2.0'
95
+ version: '2.5'
96
96
  - !ruby/object:Gem::Dependency
97
97
  name: faraday-multipart
98
98
  requirement: !ruby/object:Gem::Requirement
99
99
  requirements:
100
100
  - - "~>"
101
101
  - !ruby/object:Gem::Version
102
- version: '1.0'
102
+ version: '1.1'
103
103
  type: :runtime
104
104
  prerelease: false
105
105
  version_requirements: !ruby/object:Gem::Requirement
106
106
  requirements:
107
107
  - - "~>"
108
108
  - !ruby/object:Gem::Version
109
- version: '1.0'
109
+ version: '1.1'
110
110
  - !ruby/object:Gem::Dependency
111
111
  name: faraday-retry
112
112
  requirement: !ruby/object:Gem::Requirement
113
113
  requirements:
114
114
  - - "~>"
115
115
  - !ruby/object:Gem::Version
116
- version: '2.0'
116
+ version: '2.3'
117
117
  type: :runtime
118
118
  prerelease: false
119
119
  version_requirements: !ruby/object:Gem::Requirement
120
120
  requirements:
121
121
  - - "~>"
122
122
  - !ruby/object:Gem::Version
123
- version: '2.0'
123
+ version: '2.3'
124
124
  - !ruby/object:Gem::Dependency
125
125
  name: graphql-client
126
126
  requirement: !ruby/object:Gem::Requirement
127
127
  requirements:
128
128
  - - "~>"
129
129
  - !ruby/object:Gem::Version
130
- version: '0.0'
130
+ version: '0.26'
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
134
134
  requirements:
135
135
  - - "~>"
136
136
  - !ruby/object:Gem::Version
137
- version: '0.0'
137
+ version: '0.26'
138
138
  - !ruby/object:Gem::Dependency
139
139
  name: judges
140
140
  requirement: !ruby/object:Gem::Requirement
141
141
  requirements:
142
- - - ">"
142
+ - - "~>"
143
143
  - !ruby/object:Gem::Version
144
- version: '0'
144
+ version: '0.46'
145
145
  type: :runtime
146
146
  prerelease: false
147
147
  version_requirements: !ruby/object:Gem::Requirement
148
148
  requirements:
149
- - - ">"
149
+ - - "~>"
150
150
  - !ruby/object:Gem::Version
151
- version: '0'
151
+ version: '0.46'
152
152
  - !ruby/object:Gem::Dependency
153
153
  name: liquid
154
154
  requirement: !ruby/object:Gem::Requirement
@@ -167,30 +167,30 @@ dependencies:
167
167
  name: loog
168
168
  requirement: !ruby/object:Gem::Requirement
169
169
  requirements:
170
- - - ">"
170
+ - - "~>"
171
171
  - !ruby/object:Gem::Version
172
- version: '0'
172
+ version: '0.6'
173
173
  type: :runtime
174
174
  prerelease: false
175
175
  version_requirements: !ruby/object:Gem::Requirement
176
176
  requirements:
177
- - - ">"
177
+ - - "~>"
178
178
  - !ruby/object:Gem::Version
179
- version: '0'
179
+ version: '0.6'
180
180
  - !ruby/object:Gem::Dependency
181
181
  name: obk
182
182
  requirement: !ruby/object:Gem::Requirement
183
183
  requirements:
184
- - - ">"
184
+ - - "~>"
185
185
  - !ruby/object:Gem::Version
186
- version: '0'
186
+ version: '0.3'
187
187
  type: :runtime
188
188
  prerelease: false
189
189
  version_requirements: !ruby/object:Gem::Requirement
190
190
  requirements:
191
- - - ">"
191
+ - - "~>"
192
192
  - !ruby/object:Gem::Version
193
- version: '0'
193
+ version: '0.3'
194
194
  - !ruby/object:Gem::Dependency
195
195
  name: octokit
196
196
  requirement: !ruby/object:Gem::Requirement
@@ -209,44 +209,58 @@ dependencies:
209
209
  name: others
210
210
  requirement: !ruby/object:Gem::Requirement
211
211
  requirements:
212
- - - ">"
212
+ - - "~>"
213
213
  - !ruby/object:Gem::Version
214
- version: '0'
214
+ version: '0.0'
215
215
  type: :runtime
216
216
  prerelease: false
217
217
  version_requirements: !ruby/object:Gem::Requirement
218
218
  requirements:
219
- - - ">"
219
+ - - "~>"
220
220
  - !ruby/object:Gem::Version
221
- version: '0'
221
+ version: '0.0'
222
+ - !ruby/object:Gem::Dependency
223
+ name: sqlite3
224
+ requirement: !ruby/object:Gem::Requirement
225
+ requirements:
226
+ - - "~>"
227
+ - !ruby/object:Gem::Version
228
+ version: '2.6'
229
+ type: :runtime
230
+ prerelease: false
231
+ version_requirements: !ruby/object:Gem::Requirement
232
+ requirements:
233
+ - - "~>"
234
+ - !ruby/object:Gem::Version
235
+ version: '2.6'
222
236
  - !ruby/object:Gem::Dependency
223
237
  name: tago
224
238
  requirement: !ruby/object:Gem::Requirement
225
239
  requirements:
226
- - - ">"
240
+ - - "~>"
227
241
  - !ruby/object:Gem::Version
228
- version: '0'
242
+ version: '0.1'
229
243
  type: :runtime
230
244
  prerelease: false
231
245
  version_requirements: !ruby/object:Gem::Requirement
232
246
  requirements:
233
- - - ">"
247
+ - - "~>"
234
248
  - !ruby/object:Gem::Version
235
- version: '0'
249
+ version: '0.1'
236
250
  - !ruby/object:Gem::Dependency
237
251
  name: verbose
238
252
  requirement: !ruby/object:Gem::Requirement
239
253
  requirements:
240
- - - ">"
254
+ - - "~>"
241
255
  - !ruby/object:Gem::Version
242
- version: '0'
256
+ version: '0.0'
243
257
  type: :runtime
244
258
  prerelease: false
245
259
  version_requirements: !ruby/object:Gem::Requirement
246
260
  requirements:
247
- - - ">"
261
+ - - "~>"
248
262
  - !ruby/object:Gem::Version
249
- version: '0'
263
+ version: '0.0'
250
264
  description: A collection of extensions for a factbase, helping the judges of Zerocracy
251
265
  manipulate the facts and create new ones
252
266
  email: yegor256@gmail.com
@@ -307,6 +321,7 @@ files:
307
321
  - lib/fbe/just_one.rb
308
322
  - lib/fbe/middleware.rb
309
323
  - lib/fbe/middleware/formatter.rb
324
+ - lib/fbe/middleware/sqlite_store.rb
310
325
  - lib/fbe/middleware/trace.rb
311
326
  - lib/fbe/octo.rb
312
327
  - lib/fbe/overwrite.rb
@@ -319,6 +334,7 @@ files:
319
334
  - renovate.json
320
335
  - rules/basic.fe
321
336
  - test/fbe/middleware/test_formatter.rb
337
+ - test/fbe/middleware/test_sqlite_store.rb
322
338
  - test/fbe/middleware/test_trace.rb
323
339
  - test/fbe/test_award.rb
324
340
  - test/fbe/test_bylaws.rb