factbase 0.0.57 → 0.0.58

Sign up to get free protection for your applications and to get access to all the features.
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