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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile +1 -1
  4. data/Gemfile.lock +13 -13
  5. data/README.md +24 -24
  6. data/REUSE.toml +7 -2
  7. data/Rakefile +8 -1
  8. data/benchmark/bench_factbase.rb +1 -1
  9. data/fixtures/stories/agg.yml +17 -0
  10. data/fixtures/stories/always.yml +16 -0
  11. data/fixtures/stories/as.yml +16 -0
  12. data/fixtures/stories/count.yml +18 -0
  13. data/fixtures/stories/eq.yml +30 -0
  14. data/fixtures/stories/gt.yml +18 -0
  15. data/fixtures/stories/join.yml +19 -0
  16. data/fixtures/stories/max.yml +14 -0
  17. data/fixtures/stories/min.yml +14 -0
  18. data/fixtures/stories/nth.yml +14 -0
  19. data/fixtures/stories/or.yml +18 -0
  20. data/fixtures/stories/sprintf.yml +12 -0
  21. data/fixtures/stories/sum.yml +14 -0
  22. data/lib/factbase/cached/cached_fact.rb +28 -0
  23. data/lib/factbase/cached/cached_factbase.rb +64 -0
  24. data/lib/factbase/cached/cached_query.rb +61 -0
  25. data/lib/factbase/cached/cached_term.rb +25 -0
  26. data/lib/factbase/fact.rb +13 -13
  27. data/lib/factbase/indexed/indexed_fact.rb +28 -0
  28. data/lib/factbase/indexed/indexed_factbase.rb +64 -0
  29. data/lib/factbase/indexed/indexed_query.rb +56 -0
  30. data/lib/factbase/indexed/indexed_term.rb +60 -0
  31. data/lib/factbase/inv.rb +18 -6
  32. data/lib/factbase/light.rb +7 -6
  33. data/lib/factbase/logged.rb +87 -62
  34. data/lib/factbase/query.rb +29 -34
  35. data/lib/factbase/rules.rb +16 -15
  36. data/lib/factbase/sync/sync_factbase.rb +57 -0
  37. data/lib/factbase/sync/sync_query.rb +61 -0
  38. data/lib/factbase/syntax.rb +12 -25
  39. data/lib/factbase/tallied.rb +11 -10
  40. data/lib/factbase/taped.rb +8 -0
  41. data/lib/factbase/tee.rb +2 -0
  42. data/lib/factbase/term.rb +45 -17
  43. data/lib/factbase/terms/aggregates.rb +17 -15
  44. data/lib/factbase/terms/aliases.rb +4 -4
  45. data/lib/factbase/terms/casting.rb +8 -8
  46. data/lib/factbase/terms/debug.rb +2 -2
  47. data/lib/factbase/terms/defn.rb +3 -3
  48. data/lib/factbase/terms/logical.rb +53 -14
  49. data/lib/factbase/terms/math.rb +26 -26
  50. data/lib/factbase/terms/meta.rb +14 -14
  51. data/lib/factbase/terms/ordering.rb +4 -4
  52. data/lib/factbase/terms/strings.rb +8 -8
  53. data/lib/factbase/terms/system.rb +3 -3
  54. data/lib/factbase.rb +67 -55
  55. data/test/factbase/cached/test_cached_factbase.rb +22 -0
  56. data/test/factbase/cached/test_cached_query.rb +79 -0
  57. data/test/factbase/indexed/test_indexed_query.rb +175 -0
  58. data/test/factbase/sync/test_sync_query.rb +30 -0
  59. data/test/factbase/terms/test_aggregates.rb +5 -5
  60. data/test/factbase/terms/test_aliases.rb +7 -7
  61. data/test/factbase/terms/test_casting.rb +8 -8
  62. data/test/factbase/terms/test_debug.rb +6 -6
  63. data/test/factbase/terms/test_defn.rb +14 -14
  64. data/test/factbase/terms/test_logical.rb +17 -19
  65. data/test/factbase/terms/test_math.rb +63 -61
  66. data/test/factbase/terms/test_meta.rb +36 -36
  67. data/test/factbase/terms/test_ordering.rb +9 -9
  68. data/test/factbase/terms/test_strings.rb +10 -10
  69. data/test/factbase/terms/test_system.rb +6 -6
  70. data/test/factbase/test_accum.rb +5 -5
  71. data/test/factbase/test_fact.rb +12 -12
  72. data/test/factbase/test_logged.rb +7 -0
  73. data/test/factbase/test_query.rb +110 -37
  74. data/test/factbase/test_rules.rb +1 -1
  75. data/test/factbase/test_syntax.rb +12 -12
  76. data/test/factbase/test_tee.rb +8 -8
  77. data/test/factbase/test_term.rb +39 -30
  78. data/test/test__helper.rb +2 -2
  79. data/test/test_factbase.rb +6 -0
  80. metadata +29 -4
  81. data/lib/factbase/query_once.rb +0 -54
  82. data/lib/factbase/term_once.rb +0 -67
@@ -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