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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fec35b6880c4cfe0224107a19dd60c4b2e9ca6316b87331897b06d339f1e0f39
4
- data.tar.gz: c096effe0c1789dae54ad5da35c9ca603f279c55f93597871f0c03846c04e457
3
+ metadata.gz: 7e13671937b0df97f981c14d5dd95f18174a59694b7cae5c425de45aea36bc0e
4
+ data.tar.gz: ce5a4cc54e772b37cf57e379bbceba7149905e61c1e15ad87cec6a1434b394ed
5
5
  SHA512:
6
- metadata.gz: 6b2b85cf88fe6f5857fd51d5f58989f4ef078829749bf565b41184b15472b6247c9fa9f901848fcdfc0cc2dfe04be32098e43351e887ea546cbc2817171f0d44
7
- data.tar.gz: 1d720b58f13c156e8ee1a8c2c81d88f27339a5924fdfac8a362341a6c0324524d540c82ce1fb2df09e05d7ca7c01e5ca77369b8a35861f8aa131f06eb40018be
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.0', require: false
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.1)
68
- minitest (5.24.0)
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.0)
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.0)
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
@@ -42,7 +42,7 @@ class Factbase::Tee
42
42
  end
43
43
 
44
44
  def all_properties
45
- @fact.all_properties
45
+ @fact.all_properties + (@upper.is_a?(Hash) ? @upper.keys : @upper.all_properties)
46
46
  end
47
47
 
48
48
  others do |*args|
@@ -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.57'
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 = {})
@@ -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
- map = {}
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, map)
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.57
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-06-29 00:00:00.000000000 Z
11
+ date: 2024-07-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: backtrace