factbase 0.19.2 → 0.19.4

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 (111) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +6 -5
  3. data/Gemfile.lock +30 -27
  4. data/LICENSE.txt +1 -1
  5. data/LICENSES/MIT.txt +1 -1
  6. data/README.md +41 -41
  7. data/Rakefile +2 -2
  8. data/factbase.gemspec +1 -1
  9. data/lib/factbase/accum.rb +2 -2
  10. data/lib/factbase/cached/cached_fact.rb +4 -8
  11. data/lib/factbase/cached/cached_factbase.rb +2 -2
  12. data/lib/factbase/cached/cached_query.rb +2 -2
  13. data/lib/factbase/cached/cached_term.rb +2 -2
  14. data/lib/factbase/churn.rb +2 -2
  15. data/lib/factbase/fact.rb +2 -2
  16. data/lib/factbase/fact_as_yaml.rb +2 -2
  17. data/lib/factbase/flatten.rb +2 -2
  18. data/lib/factbase/impatient.rb +2 -2
  19. data/lib/factbase/indexed/indexed_absent.rb +1 -1
  20. data/lib/factbase/indexed/indexed_and.rb +1 -1
  21. data/lib/factbase/indexed/indexed_eq.rb +1 -1
  22. data/lib/factbase/indexed/indexed_exists.rb +1 -1
  23. data/lib/factbase/indexed/indexed_fact.rb +5 -5
  24. data/lib/factbase/indexed/indexed_factbase.rb +14 -6
  25. data/lib/factbase/indexed/indexed_gt.rb +1 -1
  26. data/lib/factbase/indexed/indexed_lt.rb +1 -1
  27. data/lib/factbase/indexed/indexed_not.rb +1 -1
  28. data/lib/factbase/indexed/indexed_one.rb +1 -1
  29. data/lib/factbase/indexed/indexed_or.rb +1 -1
  30. data/lib/factbase/indexed/indexed_query.rb +6 -4
  31. data/lib/factbase/indexed/indexed_term.rb +2 -2
  32. data/lib/factbase/indexed/indexed_unique.rb +1 -1
  33. data/lib/factbase/inv.rb +2 -2
  34. data/lib/factbase/lazy_taped.rb +1 -1
  35. data/lib/factbase/lazy_taped_array.rb +1 -1
  36. data/lib/factbase/lazy_taped_hash.rb +1 -1
  37. data/lib/factbase/light.rb +2 -2
  38. data/lib/factbase/logged.rb +2 -2
  39. data/lib/factbase/pre.rb +2 -2
  40. data/lib/factbase/query.rb +2 -2
  41. data/lib/factbase/rules.rb +2 -2
  42. data/lib/factbase/sync/sync_factbase.rb +2 -2
  43. data/lib/factbase/sync/sync_query.rb +2 -2
  44. data/lib/factbase/syntax.rb +3 -3
  45. data/lib/factbase/tallied.rb +2 -2
  46. data/lib/factbase/taped.rb +2 -2
  47. data/lib/factbase/tee.rb +2 -2
  48. data/lib/factbase/term.rb +2 -2
  49. data/lib/factbase/terms/absent.rb +1 -1
  50. data/lib/factbase/terms/agg.rb +1 -1
  51. data/lib/factbase/terms/always.rb +1 -1
  52. data/lib/factbase/terms/and.rb +1 -1
  53. data/lib/factbase/terms/arithmetic.rb +1 -1
  54. data/lib/factbase/terms/as.rb +1 -1
  55. data/lib/factbase/terms/assert.rb +1 -1
  56. data/lib/factbase/terms/base.rb +2 -2
  57. data/lib/factbase/terms/best.rb +1 -1
  58. data/lib/factbase/terms/boolean.rb +1 -1
  59. data/lib/factbase/terms/compare.rb +1 -1
  60. data/lib/factbase/terms/concat.rb +2 -2
  61. data/lib/factbase/terms/count.rb +1 -1
  62. data/lib/factbase/terms/defn.rb +4 -4
  63. data/lib/factbase/terms/div.rb +1 -1
  64. data/lib/factbase/terms/either.rb +1 -1
  65. data/lib/factbase/terms/empty.rb +1 -1
  66. data/lib/factbase/terms/env.rb +1 -1
  67. data/lib/factbase/terms/eq.rb +1 -1
  68. data/lib/factbase/terms/exists.rb +1 -1
  69. data/lib/factbase/terms/first.rb +1 -1
  70. data/lib/factbase/terms/gt.rb +1 -1
  71. data/lib/factbase/terms/gte.rb +1 -1
  72. data/lib/factbase/terms/head.rb +1 -1
  73. data/lib/factbase/terms/inverted.rb +1 -1
  74. data/lib/factbase/terms/join.rb +1 -1
  75. data/lib/factbase/terms/lt.rb +1 -1
  76. data/lib/factbase/terms/lte.rb +1 -1
  77. data/lib/factbase/terms/many.rb +1 -1
  78. data/lib/factbase/terms/matches.rb +2 -2
  79. data/lib/factbase/terms/max.rb +1 -1
  80. data/lib/factbase/terms/min.rb +1 -1
  81. data/lib/factbase/terms/minus.rb +1 -1
  82. data/lib/factbase/terms/never.rb +1 -1
  83. data/lib/factbase/terms/nil.rb +1 -1
  84. data/lib/factbase/terms/not.rb +1 -1
  85. data/lib/factbase/terms/nth.rb +1 -1
  86. data/lib/factbase/terms/one.rb +2 -2
  87. data/lib/factbase/terms/or.rb +1 -1
  88. data/lib/factbase/terms/plus.rb +1 -1
  89. data/lib/factbase/terms/prev.rb +1 -1
  90. data/lib/factbase/terms/simplified.rb +2 -2
  91. data/lib/factbase/terms/size.rb +1 -1
  92. data/lib/factbase/terms/sorted.rb +1 -1
  93. data/lib/factbase/terms/sprintf.rb +2 -2
  94. data/lib/factbase/terms/sum.rb +1 -1
  95. data/lib/factbase/terms/times.rb +1 -1
  96. data/lib/factbase/terms/to_float.rb +1 -1
  97. data/lib/factbase/terms/to_integer.rb +1 -1
  98. data/lib/factbase/terms/to_string.rb +1 -1
  99. data/lib/factbase/terms/to_time.rb +1 -1
  100. data/lib/factbase/terms/traced.rb +1 -1
  101. data/lib/factbase/terms/type.rb +1 -1
  102. data/lib/factbase/terms/undef.rb +3 -3
  103. data/lib/factbase/terms/unique.rb +1 -1
  104. data/lib/factbase/terms/when.rb +1 -1
  105. data/lib/factbase/terms/zero.rb +1 -1
  106. data/lib/factbase/to_json.rb +2 -2
  107. data/lib/factbase/to_xml.rb +2 -2
  108. data/lib/factbase/to_yaml.rb +2 -2
  109. data/lib/factbase/version.rb +3 -3
  110. data/lib/factbase.rb +2 -2
  111. metadata +1 -1
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -13,7 +13,7 @@ require_relative 'indexed_term'
13
13
  # A factbase with an index.
14
14
  #
15
15
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
16
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
16
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
17
17
  # License:: MIT
18
18
  class Factbase::IndexedFactbase
19
19
  decoor(:origin)
@@ -21,17 +21,21 @@ class Factbase::IndexedFactbase
21
21
  # Constructor.
22
22
  # @param [Factbase] origin Original factbase to decorate
23
23
  # @param [Hash] idx Index to use
24
- def initialize(origin, idx = {})
24
+ # @param [Set] fresh The set of IDs of newly inserted facts
25
+ def initialize(origin, idx = {}, fresh = Set.new)
25
26
  raise 'Wrong type of original' unless origin.respond_to?(:query)
26
27
  @origin = origin
27
28
  raise 'Wrong type of index' unless idx.is_a?(Hash)
28
29
  @idx = idx
30
+ @fresh = fresh
29
31
  end
30
32
 
31
33
  # Insert a new fact and return it.
32
34
  # @return [Factbase::Fact] The fact just inserted
33
35
  def insert
34
- Factbase::IndexedFact.new(@origin.insert, @idx, fresh: true)
36
+ f = Factbase::IndexedFact.new(@origin.insert, @idx, @fresh)
37
+ @fresh.add(f.object_id)
38
+ f
35
39
  end
36
40
 
37
41
  # Convert a query to a term.
@@ -49,7 +53,9 @@ class Factbase::IndexedFactbase
49
53
  def query(term, maps = nil)
50
54
  term = to_term(term) if term.is_a?(String)
51
55
  q = @origin.query(term, maps)
52
- Factbase::IndexedQuery.new(q, @idx, self)
56
+ q = Factbase::IndexedQuery.new(q, @idx, self, @fresh)
57
+ @fresh.clear
58
+ q
53
59
  end
54
60
 
55
61
  # Run an ACID transaction.
@@ -57,9 +63,10 @@ class Factbase::IndexedFactbase
57
63
  def txn
58
64
  result =
59
65
  @origin.txn do |fbt|
60
- yield Factbase::IndexedFactbase.new(fbt, @idx)
66
+ yield Factbase::IndexedFactbase.new(fbt, @idx, @fresh)
61
67
  end
62
68
  @idx.clear
69
+ @fresh.clear
63
70
  result
64
71
  end
65
72
 
@@ -101,6 +108,7 @@ class Factbase::IndexedFactbase
101
108
  @origin.import(bytes)
102
109
  @idx.clear
103
110
  end
111
+ @fresh.clear
104
112
  end
105
113
 
106
114
  # Size, the total number of facts in the factbase.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'gt'.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'lt'.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'not'.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'one'.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'or'.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../../factbase'
@@ -9,7 +9,7 @@ require_relative 'indexed_fact'
9
9
  # Query with an index, a decorator of another query.
10
10
  #
11
11
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
12
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
12
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
13
13
  # License:: MIT
14
14
  class Factbase::IndexedQuery
15
15
  include Enumerable
@@ -17,10 +17,12 @@ class Factbase::IndexedQuery
17
17
  # Constructor.
18
18
  # @param [Factbase::Query] origin Original query
19
19
  # @param [Hash] idx The index
20
- def initialize(origin, idx, fb)
20
+ # @param [Set] fresh The set of IDs of newly inserted facts
21
+ def initialize(origin, idx, fb, fresh)
21
22
  @origin = origin
22
23
  @idx = idx
23
24
  @fb = fb
25
+ @fresh = fresh
24
26
  end
25
27
 
26
28
  # Print it as a string.
@@ -37,7 +39,7 @@ class Factbase::IndexedQuery
37
39
  return to_enum(__method__, fb, params) unless block_given?
38
40
  a = @origin.each(fb, params).to_a
39
41
  a.each do |f|
40
- yield Factbase::IndexedFact.new(f, @idx)
42
+ yield Factbase::IndexedFact.new(f, @idx, @fresh)
41
43
  end
42
44
  a.size
43
45
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'tago'
@@ -19,7 +19,7 @@ require_relative '../indexed/indexed_unique'
19
19
  # Term with an index.
20
20
  #
21
21
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
22
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
22
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
23
23
  # License:: MIT
24
24
  module Factbase::IndexedTerm
25
25
  # Reduces the provided list of facts (maps) to a smaller array, if it's possible.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Indexed term 'unique'.
data/lib/factbase/inv.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'others'
@@ -20,7 +20,7 @@ require_relative '../factbase'
20
20
  # one is the fact just touched.
21
21
  #
22
22
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
23
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
23
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  class Factbase::Inv
26
26
  decoor(:fb)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../factbase'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../factbase'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../factbase'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../factbase'
@@ -8,7 +8,7 @@ require_relative '../factbase'
8
8
  # A decorator of a Factbase, that forbids most of the operations.
9
9
  #
10
10
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
11
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
11
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
12
12
  # License:: MIT
13
13
  class Factbase::Light
14
14
  def initialize(fb)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -12,7 +12,7 @@ require_relative 'syntax'
12
12
  # A decorator of a Factbase, that logs all operations.
13
13
  #
14
14
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
15
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
15
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
16
16
  # License:: MIT
17
17
  class Factbase::Logged
18
18
  # Ctor.
data/lib/factbase/pre.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'loog'
@@ -20,7 +20,7 @@ require_relative '../factbase'
20
20
  # one is the fact just inserted.
21
21
  #
22
22
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
23
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
23
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
24
24
  # License:: MIT
25
25
  class Factbase::Pre
26
26
  decoor(:fb)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../factbase'
@@ -17,7 +17,7 @@ require_relative 'tee'
17
17
  # It is NOT thread-safe!
18
18
  #
19
19
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
20
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
20
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
21
21
  # License:: MIT
22
22
  class Factbase::Query
23
23
  include Enumerable
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -22,7 +22,7 @@ require_relative '../factbase/tallied'
22
22
  # end # Runtime exception here (transaction won't commit)
23
23
  #
24
24
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
25
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
25
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
26
26
  # License:: MIT
27
27
  class Factbase::Rules
28
28
  decoor(:fb)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -10,7 +10,7 @@ require_relative '../../factbase'
10
10
  # A synchronous thread-safe factbase.
11
11
  #
12
12
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
13
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
13
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
14
14
  # License:: MIT
15
15
  class Factbase::SyncFactbase
16
16
  decoor(:origin)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative '../../factbase'
@@ -8,7 +8,7 @@ require_relative '../../factbase'
8
8
  # Synchronized thread-safe query.
9
9
  #
10
10
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
11
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
11
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
12
12
  # License:: MIT
13
13
  class Factbase::SyncQuery
14
14
  include Enumerable
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'backtrace'
@@ -14,7 +14,7 @@ require_relative 'term'
14
14
  # This is an internal class, it is not supposed to be instantiated directly.
15
15
  #
16
16
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
17
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
17
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
18
18
  # License:: MIT
19
19
  class Factbase::Syntax
20
20
  # If the syntax is broken.
@@ -108,7 +108,7 @@ class Factbase::Syntax
108
108
  comment = false if comment && c == "\n"
109
109
  next if comment
110
110
  if quotes.include?(c)
111
- if string && acc[acc.length - 1] == '\\'
111
+ if string && acc[-1] == '\\'
112
112
  acc = acc[0..-2]
113
113
  else
114
114
  string = !string
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -12,7 +12,7 @@ require_relative 'churn'
12
12
  # an instance of Factbase::Churn.
13
13
  #
14
14
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
15
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
15
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
16
16
  # License:: MIT
17
17
  class Factbase::Tallied
18
18
  attr_reader :churn
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'decoor'
@@ -10,7 +10,7 @@ require_relative '../factbase'
10
10
  # using their +object_id+.
11
11
  #
12
12
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
13
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
13
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
14
14
  # License:: MIT
15
15
  class Factbase::Taped
16
16
  def initialize(origin, inserted: [], deleted: [], added: [])
data/lib/factbase/tee.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'others'
@@ -9,7 +9,7 @@ require_relative '../factbase'
9
9
  # Tee of two facts.
10
10
  #
11
11
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
12
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
12
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
13
13
  # License:: MIT
14
14
  class Factbase::Tee
15
15
  # Ctor.
data/lib/factbase/term.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require 'backtrace'
@@ -84,7 +84,7 @@ require_relative 'terms/max'
84
84
  # It is NOT thread-safe!
85
85
  #
86
86
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
87
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
87
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
88
88
  # License:: MIT
89
89
  class Factbase::Term < Factbase::TermBase
90
90
  # The operator of this term
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # Test for unique term.
7
7
  # Author:: Volodya Lombrozo (volodya.lombrozo@gmail.com)
8
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
8
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
9
9
  # License:: MIT
10
10
 
11
11
  # Base class for all terms.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  # The 'best' term evaluates the best value for a given key.
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
7
7
  # Concat term.
8
8
  #
9
9
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
10
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
10
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
11
11
  # License:: MIT
12
12
  class Factbase::Concat < Factbase::TermBase
13
13
  def initialize(operands)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
7
7
 
8
8
  # Factbase::Defn is responsible for defining new terms in the Factbase system.
9
9
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
10
- # Copyright:: Copyright (c) 2024-2025 Yegor Bugayenko
10
+ # Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
11
11
  # License:: MIT
12
12
  class Factbase::Defn < Factbase::TermBase
13
13
  # Constructor.
@@ -26,8 +26,8 @@ class Factbase::Defn < Factbase::TermBase
26
26
  assert_args(2)
27
27
  fn = @operands[0]
28
28
  raise "A symbol expected as first argument of 'defn'" unless fn.is_a?(Symbol)
29
- raise "Can't use '#{fn}' name as a term" if Factbase::Term.instance_methods(true).include?(fn)
30
- raise "Term '#{fn}' is already defined" if Factbase::Term.private_instance_methods(false).include?(fn)
29
+ raise "Can't use '#{fn}' name as a term" if Factbase::Term.method_defined?(fn)
30
+ raise "Term '#{fn}' is already defined" if Factbase::Term.private_method_defined?(fn, false)
31
31
  raise "The '#{fn}' is a bad name for a term" unless fn.match?(/^[a-z_]+$/)
32
32
  e = "class Factbase::Term\nprivate\ndef #{fn}(fact, maps, fb)\n#{@operands[1]}\nend\nend"
33
33
  # rubocop:disable Security/Eval
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # SPDX-FileCopyrightText: Copyright (c) 2024-2025 Yegor Bugayenko
3
+ # SPDX-FileCopyrightText: Copyright (c) 2024-2026 Yegor Bugayenko
4
4
  # SPDX-License-Identifier: MIT
5
5
 
6
6
  require_relative 'base'