factbase 0.8.0 → 0.9.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 +4 -4
- data/.rubocop.yml +1 -1
- data/Gemfile +1 -1
- data/Gemfile.lock +13 -13
- data/README.md +24 -24
- data/REUSE.toml +7 -2
- data/Rakefile +8 -1
- data/benchmark/bench_factbase.rb +1 -1
- data/fixtures/stories/agg.yml +17 -0
- data/fixtures/stories/always.yml +16 -0
- data/fixtures/stories/as.yml +16 -0
- data/fixtures/stories/count.yml +18 -0
- data/fixtures/stories/eq.yml +30 -0
- data/fixtures/stories/gt.yml +18 -0
- data/fixtures/stories/join.yml +19 -0
- data/fixtures/stories/max.yml +14 -0
- data/fixtures/stories/min.yml +14 -0
- data/fixtures/stories/nth.yml +14 -0
- data/fixtures/stories/or.yml +18 -0
- data/fixtures/stories/sprintf.yml +12 -0
- data/fixtures/stories/sum.yml +14 -0
- data/lib/factbase/cached/cached_fact.rb +28 -0
- data/lib/factbase/cached/cached_factbase.rb +64 -0
- data/lib/factbase/cached/cached_query.rb +61 -0
- data/lib/factbase/cached/cached_term.rb +25 -0
- data/lib/factbase/fact.rb +13 -13
- data/lib/factbase/indexed/indexed_fact.rb +28 -0
- data/lib/factbase/indexed/indexed_factbase.rb +64 -0
- data/lib/factbase/indexed/indexed_query.rb +56 -0
- data/lib/factbase/indexed/indexed_term.rb +60 -0
- data/lib/factbase/inv.rb +18 -6
- data/lib/factbase/light.rb +7 -6
- data/lib/factbase/logged.rb +87 -62
- data/lib/factbase/query.rb +29 -34
- data/lib/factbase/rules.rb +16 -15
- data/lib/factbase/sync/sync_factbase.rb +57 -0
- data/lib/factbase/sync/sync_query.rb +61 -0
- data/lib/factbase/syntax.rb +12 -25
- data/lib/factbase/tallied.rb +11 -10
- data/lib/factbase/taped.rb +8 -0
- data/lib/factbase/tee.rb +2 -0
- data/lib/factbase/term.rb +45 -17
- data/lib/factbase/terms/aggregates.rb +17 -15
- data/lib/factbase/terms/aliases.rb +4 -4
- data/lib/factbase/terms/casting.rb +8 -8
- data/lib/factbase/terms/debug.rb +2 -2
- data/lib/factbase/terms/defn.rb +3 -3
- data/lib/factbase/terms/logical.rb +53 -14
- data/lib/factbase/terms/math.rb +26 -26
- data/lib/factbase/terms/meta.rb +14 -14
- data/lib/factbase/terms/ordering.rb +4 -4
- data/lib/factbase/terms/strings.rb +8 -8
- data/lib/factbase/terms/system.rb +3 -3
- data/lib/factbase.rb +67 -55
- data/test/factbase/cached/test_cached_factbase.rb +22 -0
- data/test/factbase/cached/test_cached_query.rb +79 -0
- data/test/factbase/indexed/test_indexed_query.rb +175 -0
- data/test/factbase/sync/test_sync_query.rb +30 -0
- data/test/factbase/terms/test_aggregates.rb +5 -5
- data/test/factbase/terms/test_aliases.rb +7 -7
- data/test/factbase/terms/test_casting.rb +8 -8
- data/test/factbase/terms/test_debug.rb +6 -6
- data/test/factbase/terms/test_defn.rb +14 -14
- data/test/factbase/terms/test_logical.rb +17 -19
- data/test/factbase/terms/test_math.rb +63 -61
- data/test/factbase/terms/test_meta.rb +36 -36
- data/test/factbase/terms/test_ordering.rb +9 -9
- data/test/factbase/terms/test_strings.rb +10 -10
- data/test/factbase/terms/test_system.rb +6 -6
- data/test/factbase/test_accum.rb +5 -5
- data/test/factbase/test_fact.rb +12 -12
- data/test/factbase/test_logged.rb +7 -0
- data/test/factbase/test_query.rb +110 -37
- data/test/factbase/test_rules.rb +1 -1
- data/test/factbase/test_syntax.rb +12 -12
- data/test/factbase/test_tee.rb +8 -8
- data/test/factbase/test_term.rb +39 -30
- data/test/test__helper.rb +2 -2
- data/test/test_factbase.rb +6 -0
- metadata +29 -4
- data/lib/factbase/query_once.rb +0 -54
- data/lib/factbase/term_once.rb +0 -67
data/lib/factbase/term_once.rb
DELETED
@@ -1,67 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
|
4
|
-
# SPDX-License-Identifier: MIT
|
5
|
-
|
6
|
-
require_relative '../factbase'
|
7
|
-
|
8
|
-
# Term with a cache, a decorator of another term.
|
9
|
-
#
|
10
|
-
# It is NOT thread-safe!
|
11
|
-
#
|
12
|
-
# Author:: Yegor Bugayenko (yegor256@gmail.com)
|
13
|
-
# Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
|
14
|
-
# License:: MIT
|
15
|
-
class Factbase::TermOnce < Factbase::Term
|
16
|
-
# Constructor.
|
17
|
-
# @param [Factbase::Term] term Original term
|
18
|
-
# @param [Hash] cache The cache
|
19
|
-
def initialize(term, cache)
|
20
|
-
super(nil, nil, nil) # just to please Rubocop
|
21
|
-
@term = term
|
22
|
-
@cache = cache
|
23
|
-
@text = @term.to_s
|
24
|
-
@cacheable = @term.static? && !@term.abstract?
|
25
|
-
end
|
26
|
-
|
27
|
-
# Does it match the fact?
|
28
|
-
# @param [Factbase::Fact] fact The fact
|
29
|
-
# @param [Array<Factbase::Fact>] maps All maps available
|
30
|
-
# @return [bool] TRUE if matches
|
31
|
-
def evaluate(fact, maps)
|
32
|
-
return @term.evaluate(fact, maps) unless @cacheable
|
33
|
-
key = [@text, maps.object_id]
|
34
|
-
before = @cache[key]
|
35
|
-
@cache[key] = @term.evaluate(nil, maps) if before.nil?
|
36
|
-
@cache[key]
|
37
|
-
end
|
38
|
-
|
39
|
-
# Simplify it if possible.
|
40
|
-
# @return [Factbase::Term] New term or itself
|
41
|
-
def simplify
|
42
|
-
@term.simplify
|
43
|
-
end
|
44
|
-
|
45
|
-
# Does it have any dependencies on a fact?
|
46
|
-
#
|
47
|
-
# If a term is static, it will return the same value for +evaluate+,
|
48
|
-
# no matter what is the fact given.
|
49
|
-
#
|
50
|
-
# @return [Boolean] TRUE if static
|
51
|
-
def static?
|
52
|
-
@term.static?
|
53
|
-
end
|
54
|
-
|
55
|
-
# Does it have any variables (+$foo+, for example) inside?
|
56
|
-
#
|
57
|
-
# @return [Boolean] TRUE if abstract
|
58
|
-
def abstract?
|
59
|
-
@term.abstract?
|
60
|
-
end
|
61
|
-
|
62
|
-
# Turns it into a string.
|
63
|
-
# @return [String] The string of it
|
64
|
-
def to_s
|
65
|
-
@term.to_s
|
66
|
-
end
|
67
|
-
end
|