fbe 0.23.8 → 0.24.1

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: fec8e019e6882387cebf8cd4f6c9ba1bbfc3287dc6558e8275d717b7f944273f
4
- data.tar.gz: 3d21ec46863d2ba0e241d5d766c49521ecde20d8f683f104e2c50de917f90978
3
+ metadata.gz: ce6c8e11155234d3e42b7b78fc60f9dc8584a173d0d248b604bd61b39d26180f
4
+ data.tar.gz: 8a642207f5d847c3bbc795f0c48f3410f49e8c9641a3108d14ac6802b398e91e
5
5
  SHA512:
6
- metadata.gz: 47f5e2144c9a13003d0cde086902abe2258fbbe471359e1bb38f84083cd8d5d0cacf9ecb8153fa7810ef3613193b81fef3ebc5a41d648778cf692a90980bc141
7
- data.tar.gz: 3146af1240d7cb7028d93267d9b52db316d5d3f3352e1996db2d7852cfa6347ef2cbf2e21bc405bb135076805463199719eb66e48be26f65d69b8afc7362c56f
6
+ metadata.gz: e4440719106088a76557dffdc71fd9b91c3f1f25bb5eb7cd98cb1e5afc8f32d182bc4a0fb58ab47901b3c5394c1b8d213593b2a34419095816917c1756632667
7
+ data.tar.gz: 5b2930074b232c9be48e45addab74d7d3cb806e145445adc488e8bbec35d1c598713aed670cfc65a7238dd21a46dd9d03ed4c145714e95dafb3e5aa627f2416e
data/Gemfile.lock CHANGED
@@ -3,8 +3,8 @@ PATH
3
3
  specs:
4
4
  fbe (0.0.0)
5
5
  backtrace (~> 0.4)
6
- baza.rb (~> 0.5)
7
- decoor (~> 0.0)
6
+ baza.rb (~> 0.9)
7
+ decoor (~> 0.1)
8
8
  ellipsized (~> 0.3)
9
9
  factbase (~> 0.11)
10
10
  faraday (~> 2.0)
@@ -19,7 +19,7 @@ PATH
19
19
  loog (~> 0.6)
20
20
  obk (~> 0.3)
21
21
  octokit (~> 10.0)
22
- others (~> 0.0)
22
+ others (~> 0.1)
23
23
  sqlite3 (~> 2.6)
24
24
  tago (~> 0.1)
25
25
  verbose (~> 0.0)
@@ -46,7 +46,7 @@ GEM
46
46
  ast (2.4.3)
47
47
  backtrace (0.4.1)
48
48
  base64 (0.3.0)
49
- baza.rb (0.9.6)
49
+ baza.rb (0.9.7)
50
50
  backtrace (~> 0.4)
51
51
  elapsed (~> 0.0)
52
52
  faraday (~> 2.13)
@@ -75,7 +75,7 @@ GEM
75
75
  ellipsized (0.3.0)
76
76
  ethon (0.16.0)
77
77
  ffi (>= 1.15.0)
78
- factbase (0.12.1)
78
+ factbase (0.13.0)
79
79
  backtrace (~> 0.4)
80
80
  decoor (~> 0.0)
81
81
  ellipsized (~> 0.3)
@@ -106,7 +106,7 @@ GEM
106
106
  filesize (0.2.0)
107
107
  gli (2.22.2)
108
108
  ostruct
109
- graphql (2.5.9)
109
+ graphql (2.5.10)
110
110
  base64
111
111
  fiber-storage
112
112
  logger
data/fbe.gemspec CHANGED
@@ -23,8 +23,8 @@ Gem::Specification.new do |s|
23
23
  s.rdoc_options = ['--charset=UTF-8']
24
24
  s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
25
25
  s.add_dependency 'backtrace', '~>0.4'
26
- s.add_dependency 'baza.rb', '~>0.5'
27
- s.add_dependency 'decoor', '~>0.0'
26
+ s.add_dependency 'baza.rb', '~>0.9'
27
+ s.add_dependency 'decoor', '~>0.1'
28
28
  s.add_dependency 'ellipsized', '~>0.3'
29
29
  s.add_dependency 'factbase', '~>0.11'
30
30
  s.add_dependency 'faraday', '~>2.0'
@@ -39,7 +39,7 @@ Gem::Specification.new do |s|
39
39
  s.add_dependency 'loog', '~>0.6'
40
40
  s.add_dependency 'obk', '~>0.3'
41
41
  s.add_dependency 'octokit', '~>10.0'
42
- s.add_dependency 'others', '~>0.0'
42
+ s.add_dependency 'others', '~>0.1'
43
43
  s.add_dependency 'sqlite3', '~> 2.6'
44
44
  s.add_dependency 'tago', '~>0.1'
45
45
  s.add_dependency 'verbose', '~>0.0'
data/lib/fbe/conclude.rb CHANGED
@@ -182,8 +182,8 @@ class Fbe::Conclude
182
182
  passed = 0
183
183
  start = Time.now
184
184
  oct = Fbe.octo(loog: @loog, options: @options, global: @global)
185
- @fb.txn do |fbt|
186
- fbt.query(@query).each do |a|
185
+ @fb.query(@query).each do |a|
186
+ @fb.txn do |fbt|
187
187
  if @quota_aware && oct.off_quota?
188
188
  @loog.debug('We ran out of GitHub quota, must stop here')
189
189
  throw :commit
@@ -3,6 +3,7 @@
3
3
  # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
+ require 'zlib'
6
7
  require 'filesize'
7
8
  require 'json'
8
9
  require 'loog'
@@ -73,7 +74,13 @@ class Fbe::Middleware::SqliteStore
73
74
  t.execute('UPDATE cache SET touched_at = ?2 WHERE key = ?1;', [key, Time.now.utc.iso8601])
74
75
  t.execute('SELECT value FROM cache WHERE key = ? LIMIT 1;', [key])
75
76
  end.dig(0, 0)
76
- JSON.parse(value) if value
77
+ return unless value
78
+ begin
79
+ JSON.parse(Zlib::Inflate.inflate(value))
80
+ rescue Zlib::Error => e
81
+ @loog.info("Failed to decompress cached value for key: #{key}, error: #{e.message}, the key will be deleted")
82
+ delete(key)
83
+ end
77
84
  end
78
85
 
79
86
  # Delete a key from the cache.
@@ -95,7 +102,7 @@ class Fbe::Middleware::SqliteStore
95
102
  req = JSON.parse(vv[0])
96
103
  req['method'] != 'get'
97
104
  end
98
- value = JSON.dump(value)
105
+ value = Zlib::Deflate.deflate(JSON.dump(value))
99
106
  return if value.bytesize > @maxvsize
100
107
  perform do |t|
101
108
  t.execute(<<~SQL, [key, value, Time.now.utc.iso8601])
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.23.8' unless const_defined?(:VERSION)
13
+ VERSION = '0.24.1' unless const_defined?(:VERSION)
14
14
  end
@@ -3,6 +3,7 @@
3
3
  # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Zerocracy
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
+ require 'securerandom'
6
7
  require 'qbash'
7
8
  require_relative '../../test__helper'
8
9
  require_relative '../../../lib/fbe/middleware'
@@ -141,8 +142,8 @@ class SqliteStoreTest < Fbe::Test
141
142
  Fbe::Middleware::SqliteStore.new(f, '0.0.1', loog: fake_loog).then do |store|
142
143
  store.write('a', 'a' * 9_997)
143
144
  store.write('b', 'b' * 9_998)
144
- store.write('c', 'c' * 19_999)
145
- store.write('d', 'd' * 30_000)
145
+ store.write('c', SecureRandom.alphanumeric((19_999 * 1.4).to_i))
146
+ store.write('d', SecureRandom.alphanumeric((30_000 * 1.4).to_i))
146
147
  assert_equal('a' * 9_997, store.read('a'))
147
148
  assert_equal('b' * 9_998, store.read('b'))
148
149
  assert_nil(store.read('c'))
@@ -155,7 +156,6 @@ class SqliteStoreTest < Fbe::Test
155
156
  with_tmpfile('large.db') do |f|
156
157
  Fbe::Middleware::SqliteStore.new(f, '0.0.1', loog: fake_loog).then do |store|
157
158
  key = 'aaa'
158
- alpha = ('a'..'z').to_a
159
159
  store.write('a', 'aa')
160
160
  Time.stub(:now, (Time.now - (5 * 60 * 60)).round) do
161
161
  store.write('b', 'bb')
@@ -163,8 +163,8 @@ class SqliteStoreTest < Fbe::Test
163
163
  end
164
164
  assert_equal('cc', store.read('c'))
165
165
  Time.stub(:now, rand((Time.now - (5 * 60 * 60))..Time.now).round) do
166
+ value = SecureRandom.alphanumeric(2048)
166
167
  10_240.times do
167
- value = alpha.sample * rand(1024..2048)
168
168
  store.write(key, value)
169
169
  key = key.next
170
170
  end
@@ -185,8 +185,8 @@ class SqliteStoreTest < Fbe::Test
185
185
  SQLite3::Database.new(f).tap do |d|
186
186
  d.execute 'CREATE TABLE IF NOT EXISTS cache(key TEXT UNIQUE NOT NULL, value TEXT);'
187
187
  [
188
- ['key1', JSON.dump('value1')],
189
- ['key2', JSON.dump('value2')]
188
+ ['key1', Zlib::Deflate.deflate(JSON.dump('value1'))],
189
+ ['key2', Zlib::Deflate.deflate(JSON.dump('value2'))]
190
190
  ].each { d.execute 'INSERT INTO cache(key, value) VALUES(?1, ?2);', _1 }
191
191
  d.execute 'CREATE TABLE IF NOT EXISTS meta(key TEXT UNIQUE NOT NULL, value TEXT);'
192
192
  d.execute "INSERT INTO meta(key, value) VALUES('version', ?);", ['0.0.1']
@@ -200,6 +200,43 @@ class SqliteStoreTest < Fbe::Test
200
200
  end
201
201
  end
202
202
 
203
+ def test_use_compress_for_stored_data
204
+ with_tmpfile('c.db') do |f|
205
+ Fbe::Middleware::SqliteStore.new(f, '0.0.1', loog: fake_loog).then do |store|
206
+ a = SecureRandom.alphanumeric(200)
207
+ store.write('a', a)
208
+ store.write('b', 'b' * 100_000)
209
+ assert_equal(a, store.read('a'))
210
+ assert_equal('b' * 100_000, store.read('b'))
211
+ store.all.each do |k, v|
212
+ case k
213
+ when 'a'
214
+ assert_operator(v.size, :<, a.size)
215
+ when 'b'
216
+ assert_operator(v.size, :<, 100_000)
217
+ end
218
+ end
219
+ end
220
+ end
221
+ end
222
+
223
+ def test_corrupted_compression_stored_data
224
+ with_tmpfile('c.db') do |f|
225
+ SQLite3::Database.new(f).tap do |d|
226
+ d.execute 'CREATE TABLE IF NOT EXISTS cache(key TEXT UNIQUE NOT NULL, value TEXT);'
227
+ [
228
+ ['my_key', JSON.dump('value1')]
229
+ ].each { d.execute 'INSERT INTO cache(key, value) VALUES(?1, ?2);', _1 }
230
+ d.execute 'CREATE TABLE IF NOT EXISTS meta(key TEXT UNIQUE NOT NULL, value TEXT);'
231
+ d.execute "INSERT INTO meta(key, value) VALUES('version', ?);", ['0.0.1']
232
+ end
233
+ Fbe::Middleware::SqliteStore.new(f, '0.0.1', loog: fake_loog).then do |store|
234
+ assert_nil(store.read('my_key'))
235
+ assert_predicate(store.all.count, :zero?)
236
+ end
237
+ end
238
+ end
239
+
203
240
  private
204
241
 
205
242
  def with_tmpfile(name = 'test.db', &)
@@ -47,6 +47,22 @@ class TestConclude < Fbe::Test
47
47
  assert_includes(f.details, 'funny')
48
48
  end
49
49
 
50
+ def test_draw_with_rollback
51
+ $fb = Factbase.new
52
+ $global = {}
53
+ $loog = Loog::NULL
54
+ $options = Judges::Options.new
55
+ $fb.insert.foo = 1
56
+ Fbe.conclude(judge: 'judge-one') do
57
+ on '(exists foo)'
58
+ draw do |n, prev|
59
+ n.hello = prev.foo
60
+ throw :rollback
61
+ end
62
+ end
63
+ assert_equal(1, $fb.size)
64
+ end
65
+
50
66
  def test_consider
51
67
  fb = Factbase.new
52
68
  fb.insert.foo = 1
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.23.8
4
+ version: 0.24.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -29,28 +29,28 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.5'
32
+ version: '0.9'
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.5'
39
+ version: '0.9'
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.0'
46
+ version: '0.1'
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.0'
53
+ version: '0.1'
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: ellipsized
56
56
  requirement: !ruby/object:Gem::Requirement
@@ -253,14 +253,14 @@ dependencies:
253
253
  requirements:
254
254
  - - "~>"
255
255
  - !ruby/object:Gem::Version
256
- version: '0.0'
256
+ version: '0.1'
257
257
  type: :runtime
258
258
  prerelease: false
259
259
  version_requirements: !ruby/object:Gem::Requirement
260
260
  requirements:
261
261
  - - "~>"
262
262
  - !ruby/object:Gem::Version
263
- version: '0.0'
263
+ version: '0.1'
264
264
  - !ruby/object:Gem::Dependency
265
265
  name: sqlite3
266
266
  requirement: !ruby/object:Gem::Requirement