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.
- checksums.yaml +4 -4
- data/Gemfile +6 -5
- data/Gemfile.lock +30 -27
- data/LICENSE.txt +1 -1
- data/LICENSES/MIT.txt +1 -1
- data/README.md +41 -41
- data/Rakefile +2 -2
- data/factbase.gemspec +1 -1
- data/lib/factbase/accum.rb +2 -2
- data/lib/factbase/cached/cached_fact.rb +4 -8
- data/lib/factbase/cached/cached_factbase.rb +2 -2
- data/lib/factbase/cached/cached_query.rb +2 -2
- data/lib/factbase/cached/cached_term.rb +2 -2
- data/lib/factbase/churn.rb +2 -2
- data/lib/factbase/fact.rb +2 -2
- data/lib/factbase/fact_as_yaml.rb +2 -2
- data/lib/factbase/flatten.rb +2 -2
- data/lib/factbase/impatient.rb +2 -2
- data/lib/factbase/indexed/indexed_absent.rb +1 -1
- data/lib/factbase/indexed/indexed_and.rb +1 -1
- data/lib/factbase/indexed/indexed_eq.rb +1 -1
- data/lib/factbase/indexed/indexed_exists.rb +1 -1
- data/lib/factbase/indexed/indexed_fact.rb +5 -5
- data/lib/factbase/indexed/indexed_factbase.rb +14 -6
- data/lib/factbase/indexed/indexed_gt.rb +1 -1
- data/lib/factbase/indexed/indexed_lt.rb +1 -1
- data/lib/factbase/indexed/indexed_not.rb +1 -1
- data/lib/factbase/indexed/indexed_one.rb +1 -1
- data/lib/factbase/indexed/indexed_or.rb +1 -1
- data/lib/factbase/indexed/indexed_query.rb +6 -4
- data/lib/factbase/indexed/indexed_term.rb +2 -2
- data/lib/factbase/indexed/indexed_unique.rb +1 -1
- data/lib/factbase/inv.rb +2 -2
- data/lib/factbase/lazy_taped.rb +1 -1
- data/lib/factbase/lazy_taped_array.rb +1 -1
- data/lib/factbase/lazy_taped_hash.rb +1 -1
- data/lib/factbase/light.rb +2 -2
- data/lib/factbase/logged.rb +2 -2
- data/lib/factbase/pre.rb +2 -2
- data/lib/factbase/query.rb +2 -2
- data/lib/factbase/rules.rb +2 -2
- data/lib/factbase/sync/sync_factbase.rb +2 -2
- data/lib/factbase/sync/sync_query.rb +2 -2
- data/lib/factbase/syntax.rb +3 -3
- data/lib/factbase/tallied.rb +2 -2
- data/lib/factbase/taped.rb +2 -2
- data/lib/factbase/tee.rb +2 -2
- data/lib/factbase/term.rb +2 -2
- data/lib/factbase/terms/absent.rb +1 -1
- data/lib/factbase/terms/agg.rb +1 -1
- data/lib/factbase/terms/always.rb +1 -1
- data/lib/factbase/terms/and.rb +1 -1
- data/lib/factbase/terms/arithmetic.rb +1 -1
- data/lib/factbase/terms/as.rb +1 -1
- data/lib/factbase/terms/assert.rb +1 -1
- data/lib/factbase/terms/base.rb +2 -2
- data/lib/factbase/terms/best.rb +1 -1
- data/lib/factbase/terms/boolean.rb +1 -1
- data/lib/factbase/terms/compare.rb +1 -1
- data/lib/factbase/terms/concat.rb +2 -2
- data/lib/factbase/terms/count.rb +1 -1
- data/lib/factbase/terms/defn.rb +4 -4
- data/lib/factbase/terms/div.rb +1 -1
- data/lib/factbase/terms/either.rb +1 -1
- data/lib/factbase/terms/empty.rb +1 -1
- data/lib/factbase/terms/env.rb +1 -1
- data/lib/factbase/terms/eq.rb +1 -1
- data/lib/factbase/terms/exists.rb +1 -1
- data/lib/factbase/terms/first.rb +1 -1
- data/lib/factbase/terms/gt.rb +1 -1
- data/lib/factbase/terms/gte.rb +1 -1
- data/lib/factbase/terms/head.rb +1 -1
- data/lib/factbase/terms/inverted.rb +1 -1
- data/lib/factbase/terms/join.rb +1 -1
- data/lib/factbase/terms/lt.rb +1 -1
- data/lib/factbase/terms/lte.rb +1 -1
- data/lib/factbase/terms/many.rb +1 -1
- data/lib/factbase/terms/matches.rb +2 -2
- data/lib/factbase/terms/max.rb +1 -1
- data/lib/factbase/terms/min.rb +1 -1
- data/lib/factbase/terms/minus.rb +1 -1
- data/lib/factbase/terms/never.rb +1 -1
- data/lib/factbase/terms/nil.rb +1 -1
- data/lib/factbase/terms/not.rb +1 -1
- data/lib/factbase/terms/nth.rb +1 -1
- data/lib/factbase/terms/one.rb +2 -2
- data/lib/factbase/terms/or.rb +1 -1
- data/lib/factbase/terms/plus.rb +1 -1
- data/lib/factbase/terms/prev.rb +1 -1
- data/lib/factbase/terms/simplified.rb +2 -2
- data/lib/factbase/terms/size.rb +1 -1
- data/lib/factbase/terms/sorted.rb +1 -1
- data/lib/factbase/terms/sprintf.rb +2 -2
- data/lib/factbase/terms/sum.rb +1 -1
- data/lib/factbase/terms/times.rb +1 -1
- data/lib/factbase/terms/to_float.rb +1 -1
- data/lib/factbase/terms/to_integer.rb +1 -1
- data/lib/factbase/terms/to_string.rb +1 -1
- data/lib/factbase/terms/to_time.rb +1 -1
- data/lib/factbase/terms/traced.rb +1 -1
- data/lib/factbase/terms/type.rb +1 -1
- data/lib/factbase/terms/undef.rb +3 -3
- data/lib/factbase/terms/unique.rb +1 -1
- data/lib/factbase/terms/when.rb +1 -1
- data/lib/factbase/terms/zero.rb +1 -1
- data/lib/factbase/to_json.rb +2 -2
- data/lib/factbase/to_xml.rb +2 -2
- data/lib/factbase/to_yaml.rb +2 -2
- data/lib/factbase/version.rb +3 -3
- data/lib/factbase.rb +2 -2
- metadata +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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
|
-
|
|
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
|
|
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-
|
|
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-
|
|
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
|
-
|
|
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-
|
|
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-
|
|
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.
|
data/lib/factbase/inv.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
23
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
24
24
|
# License:: MIT
|
|
25
25
|
class Factbase::Inv
|
|
26
26
|
decoor(:fb)
|
data/lib/factbase/lazy_taped.rb
CHANGED
data/lib/factbase/light.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
11
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
12
12
|
# License:: MIT
|
|
13
13
|
class Factbase::Light
|
|
14
14
|
def initialize(fb)
|
data/lib/factbase/logged.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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-
|
|
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-
|
|
23
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
24
24
|
# License:: MIT
|
|
25
25
|
class Factbase::Pre
|
|
26
26
|
decoor(:fb)
|
data/lib/factbase/query.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
20
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
21
21
|
# License:: MIT
|
|
22
22
|
class Factbase::Query
|
|
23
23
|
include Enumerable
|
data/lib/factbase/rules.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
11
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
12
12
|
# License:: MIT
|
|
13
13
|
class Factbase::SyncQuery
|
|
14
14
|
include Enumerable
|
data/lib/factbase/syntax.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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[
|
|
111
|
+
if string && acc[-1] == '\\'
|
|
112
112
|
acc = acc[0..-2]
|
|
113
113
|
else
|
|
114
114
|
string = !string
|
data/lib/factbase/tallied.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
15
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
16
16
|
# License:: MIT
|
|
17
17
|
class Factbase::Tallied
|
|
18
18
|
attr_reader :churn
|
data/lib/factbase/taped.rb
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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
|
data/lib/factbase/terms/agg.rb
CHANGED
data/lib/factbase/terms/and.rb
CHANGED
data/lib/factbase/terms/as.rb
CHANGED
data/lib/factbase/terms/base.rb
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
8
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
9
9
|
# License:: MIT
|
|
10
10
|
|
|
11
11
|
# Base class for all terms.
|
data/lib/factbase/terms/best.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
10
|
+
# Copyright:: Copyright (c) 2024-2026 Yegor Bugayenko
|
|
11
11
|
# License:: MIT
|
|
12
12
|
class Factbase::Concat < Factbase::TermBase
|
|
13
13
|
def initialize(operands)
|
data/lib/factbase/terms/count.rb
CHANGED
data/lib/factbase/terms/defn.rb
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
# SPDX-FileCopyrightText: Copyright (c) 2024-
|
|
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-
|
|
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.
|
|
30
|
-
raise "Term '#{fn}' is already defined" if Factbase::Term.
|
|
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
|
data/lib/factbase/terms/div.rb
CHANGED
data/lib/factbase/terms/empty.rb
CHANGED
data/lib/factbase/terms/env.rb
CHANGED