factbase 0.0.57 → 0.0.58
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 +1 -1
- data/Gemfile.lock +4 -4
- data/README.md +6 -0
- data/lib/factbase/tee.rb +1 -1
- data/lib/factbase/terms/math.rb +21 -0
- data/lib/factbase.rb +1 -1
- data/test/factbase/terms/test_aliases.rb +4 -3
- data/test/factbase/terms/test_math.rb +15 -0
- data/test/factbase/test_tee.rb +12 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7e13671937b0df97f981c14d5dd95f18174a59694b7cae5c425de45aea36bc0e
|
4
|
+
data.tar.gz: ce5a4cc54e772b37cf57e379bbceba7149905e61c1e15ad87cec6a1434b394ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5115395546357ab98c6035605667e664228a1d84a802475721eb05a35d836e5d8041f29c66ffa96fe31b02fd5f006776896e8765bb9d9535705602ed0337e0a8
|
7
|
+
data.tar.gz: 95d4751859aec0fb9ad1adbcaaee2b30e178f67cfd7ba95d596ee4e0337ac02fdc88697f07db330f24c7f82c4ad33b4bd4aa0a0d6e1bb0f19e28f0e2b5d0aa3e
|
data/Gemfile
CHANGED
@@ -23,7 +23,7 @@
|
|
23
23
|
source 'https://rubygems.org'
|
24
24
|
gemspec
|
25
25
|
|
26
|
-
gem 'minitest', '5.24.
|
26
|
+
gem 'minitest', '5.24.1', require: false
|
27
27
|
gem 'rake', '13.2.1', require: false
|
28
28
|
gem 'rspec-rails', '6.1.3', require: false
|
29
29
|
gem 'rubocop', '1.64.1', require: false
|
data/Gemfile.lock
CHANGED
@@ -64,8 +64,8 @@ GEM
|
|
64
64
|
loofah (2.22.0)
|
65
65
|
crass (~> 1.0.2)
|
66
66
|
nokogiri (>= 1.12.0)
|
67
|
-
loog (0.5.
|
68
|
-
minitest (5.24.
|
67
|
+
loog (0.5.2)
|
68
|
+
minitest (5.24.1)
|
69
69
|
mutex_m (0.2.0)
|
70
70
|
nokogiri (1.16.6-arm64-darwin)
|
71
71
|
racc (~> 1.4)
|
@@ -113,7 +113,7 @@ GEM
|
|
113
113
|
regexp_parser (2.9.2)
|
114
114
|
reline (0.5.9)
|
115
115
|
io-console (~> 0.5)
|
116
|
-
rexml (3.3.
|
116
|
+
rexml (3.3.1)
|
117
117
|
strscan
|
118
118
|
rspec-core (3.13.0)
|
119
119
|
rspec-support (~> 3.13.0)
|
@@ -180,7 +180,7 @@ PLATFORMS
|
|
180
180
|
|
181
181
|
DEPENDENCIES
|
182
182
|
factbase!
|
183
|
-
minitest (= 5.24.
|
183
|
+
minitest (= 5.24.1)
|
184
184
|
rake (= 13.2.1)
|
185
185
|
rspec-rails (= 6.1.3)
|
186
186
|
rubocop (= 1.64.1)
|
data/README.md
CHANGED
@@ -97,6 +97,12 @@ Also, some simple arithmetic:
|
|
97
97
|
* `(times v1 v2)` is a multiplication of `∏v1` and `∏v2`
|
98
98
|
* `(div v1 v2)` is a division of `∏v1` by `∏v2`
|
99
99
|
|
100
|
+
Types may be converted:
|
101
|
+
|
102
|
+
* `(to_int v)` is an integer of `v`
|
103
|
+
* `(to_str v)` is a string of `v`
|
104
|
+
* `(to_float v)` is a float of `v`
|
105
|
+
|
100
106
|
One term is for meta-programming:
|
101
107
|
|
102
108
|
* `(defn f "self.to_s")` defines a new term using Ruby syntax and returns `true`
|
data/lib/factbase/tee.rb
CHANGED
data/lib/factbase/terms/math.rb
CHANGED
@@ -51,6 +51,27 @@ module Factbase::Term::Math
|
|
51
51
|
vv.any? { |v| (v.is_a?(Integer) || v.is_a?(Float)) && v.zero? }
|
52
52
|
end
|
53
53
|
|
54
|
+
def to_str(fact, maps)
|
55
|
+
assert_args(1)
|
56
|
+
vv = the_values(0, fact, maps)
|
57
|
+
return nil if vv.nil?
|
58
|
+
vv[0].to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
def to_int(fact, maps)
|
62
|
+
assert_args(1)
|
63
|
+
vv = the_values(0, fact, maps)
|
64
|
+
return nil if vv.nil?
|
65
|
+
vv[0].to_i
|
66
|
+
end
|
67
|
+
|
68
|
+
def to_float(fact, maps)
|
69
|
+
assert_args(1)
|
70
|
+
vv = the_values(0, fact, maps)
|
71
|
+
return nil if vv.nil?
|
72
|
+
vv[0].to_f
|
73
|
+
end
|
74
|
+
|
54
75
|
def eq(fact, maps)
|
55
76
|
cmp(:==, fact, maps)
|
56
77
|
end
|
data/lib/factbase.rb
CHANGED
@@ -81,7 +81,7 @@ require 'yaml'
|
|
81
81
|
# License:: MIT
|
82
82
|
class Factbase
|
83
83
|
# Current version of the gem (changed by .rultor.yml on every release)
|
84
|
-
VERSION = '0.0.
|
84
|
+
VERSION = '0.0.58'
|
85
85
|
|
86
86
|
# An exception that may be thrown in a transaction, to roll it back.
|
87
87
|
class Rollback < StandardError; end
|
@@ -32,13 +32,14 @@ require_relative '../../../lib/factbase/accum'
|
|
32
32
|
class TestAliases < Minitest::Test
|
33
33
|
def test_aliases
|
34
34
|
maps = [
|
35
|
-
{ 'x' => [1], 'y' => [0] },
|
36
|
-
{ 'x' => [2], 'y' => [42] }
|
35
|
+
{ 'x' => [1], 'y' => [0], 't1' => [Time.now], 't2' => [Time.now] },
|
36
|
+
{ 'x' => [2], 'y' => [42], 't' => [Time.now] }
|
37
37
|
]
|
38
38
|
{
|
39
39
|
'(as foo (plus x 1))' => '(exists foo)',
|
40
40
|
'(as foo (plus x y))' => '(gt foo 0)',
|
41
|
-
'(as foo (plus bar 1))' => '(absent foo)'
|
41
|
+
'(as foo (plus bar 1))' => '(absent foo)',
|
42
|
+
'(as foo (minus t1 t2))' => '(when (exists foo) (eq "Float" (type foo)))'
|
42
43
|
}.each do |q, r|
|
43
44
|
t = Factbase::Syntax.new(q).to_term
|
44
45
|
maps.each do |m|
|
@@ -91,6 +91,21 @@ class TestMath < Minitest::Test
|
|
91
91
|
assert(!t.evaluate(fact('bar' => [100]), []))
|
92
92
|
end
|
93
93
|
|
94
|
+
def test_to_str
|
95
|
+
t = Factbase::Term.new(:to_str, [Time.now])
|
96
|
+
assert_equal('String', t.evaluate(fact, []).class.to_s)
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_to_int
|
100
|
+
t = Factbase::Term.new(:to_int, [[42, 'hello']])
|
101
|
+
assert_equal('Integer', t.evaluate(fact, []).class.to_s)
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_to_float
|
105
|
+
t = Factbase::Term.new(:to_float, [[3.14, 'hello']])
|
106
|
+
assert_equal('Float', t.evaluate(fact, []).class.to_s)
|
107
|
+
end
|
108
|
+
|
94
109
|
private
|
95
110
|
|
96
111
|
def fact(map = {})
|
data/test/factbase/test_tee.rb
CHANGED
@@ -31,16 +31,25 @@ require_relative '../../lib/factbase/fact'
|
|
31
31
|
# License:: MIT
|
32
32
|
class TestTee < Minitest::Test
|
33
33
|
def test_two_facts
|
34
|
-
|
35
|
-
prim = Factbase::Fact.new(Mutex.new, map)
|
34
|
+
prim = Factbase::Fact.new(Mutex.new, {})
|
36
35
|
prim.foo = 42
|
37
|
-
upper = Factbase::Fact.new(Mutex.new,
|
36
|
+
upper = Factbase::Fact.new(Mutex.new, {})
|
38
37
|
upper.bar = 13
|
39
38
|
t = Factbase::Tee.new(prim, upper)
|
40
39
|
assert_equal(42, t.foo)
|
41
40
|
assert_equal([13], t['$bar'])
|
42
41
|
end
|
43
42
|
|
43
|
+
def test_all_properties
|
44
|
+
prim = Factbase::Fact.new(Mutex.new, {})
|
45
|
+
prim.foo = 42
|
46
|
+
upper = Factbase::Fact.new(Mutex.new, {})
|
47
|
+
upper.bar = 13
|
48
|
+
t = Factbase::Tee.new(prim, upper)
|
49
|
+
assert(t.all_properties.include?('foo'))
|
50
|
+
assert(t.all_properties.include?('bar'))
|
51
|
+
end
|
52
|
+
|
44
53
|
def test_recursively
|
45
54
|
map = {}
|
46
55
|
prim = Factbase::Fact.new(Mutex.new, map)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: factbase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.58
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yegor Bugayenko
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-07-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: backtrace
|