From cbb4d205764f81838069ee95ba0646fc26ef8d48 Mon Sep 17 00:00:00 2001 From: Yegor Bugayenko Date: Fri, 5 Jul 2024 09:39:00 +0300 Subject: [PATCH] #11 cache fb in global --- lib/fbe/fb.rb | 28 +++++++++++++++------------- test/fbe/test_conclude.rb | 3 +++ test/fbe/test_fb.rb | 1 + 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/lib/fbe/fb.rb b/lib/fbe/fb.rb index 229fcea..55c9387 100644 --- a/lib/fbe/fb.rb +++ b/lib/fbe/fb.rb @@ -29,18 +29,20 @@ require 'factbase/rules' require_relative '../fbe' -def Fbe.fb - rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) } - fb = Factbase::Rules.new( - $fb, - "(and \n#{rules.join("\n")}\n)", - uid: '_id' - ) - fb = Factbase::Pre.new(fb) do |f| - max = $fb.query('(eq _id (max _id))').each.to_a.first - f._id = (max.nil? ? 0 : max._id) + 1 - f._time = Time.now - f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{$options.judges_action_version}" +def Fbe.fb(global: $global) + global[:fb] ||= begin + rules = Dir.glob(File.join('rules', '*.fe')).map { |f| File.read(f) } + fb = Factbase::Rules.new( + $fb, + "(and \n#{rules.join("\n")}\n)", + uid: '_id' + ) + fb = Factbase::Pre.new(fb) do |f| + max = $fb.query('(eq _id (max _id))').each.to_a.first + f._id = (max.nil? ? 0 : max._id) + 1 + f._time = Time.now + f._version = "#{Factbase::VERSION}/#{Judges::VERSION}/#{$options.judges_action_version}" + end + Factbase::Looged.new(fb, Loog::NULL) end - Factbase::Looged.new(fb, Loog::NULL) end diff --git a/test/fbe/test_conclude.rb b/test/fbe/test_conclude.rb index 28ea008..280e34d 100644 --- a/test/fbe/test_conclude.rb +++ b/test/fbe/test_conclude.rb @@ -37,6 +37,7 @@ class TestConclude < Minitest::Test def test_with_defaults $fb = Factbase.new + $global = {} $options = Judges::Options.new $loog = Loog::NULL Fbe.conclude do @@ -63,6 +64,7 @@ def test_draw def test_maybe $fb = Factbase.new + $global = {} $options = Judges::Options.new $loog = Loog::NULL Fbe.fb.insert.foo = 1 @@ -84,6 +86,7 @@ def test_maybe def test_consider $fb = Factbase.new + $global = {} $options = Judges::Options.new $loog = Loog::NULL Fbe.fb.insert.foo = 1 diff --git a/test/fbe/test_fb.rb b/test/fbe/test_fb.rb index 52656ff..df5ec17 100644 --- a/test/fbe/test_fb.rb +++ b/test/fbe/test_fb.rb @@ -35,6 +35,7 @@ class TestFb < Minitest::Test def test_simple $fb = Factbase.new + $global = {} $options = Judges::Options.new Fbe.fb.insert.foo = 1 Fbe.fb.insert.bar = 2