factbase 0.0.58 → 0.0.59

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: 7e13671937b0df97f981c14d5dd95f18174a59694b7cae5c425de45aea36bc0e
4
- data.tar.gz: ce5a4cc54e772b37cf57e379bbceba7149905e61c1e15ad87cec6a1434b394ed
3
+ metadata.gz: c62bd0cae1b70119954f0f2c1eef5ef9ff92e7073dc5f86492cc1f048456580c
4
+ data.tar.gz: 7cfd0410d94217f51b84e41707c1bfecd493f022a840507f18a2d92fd9bb3d9c
5
5
  SHA512:
6
- metadata.gz: 5115395546357ab98c6035605667e664228a1d84a802475721eb05a35d836e5d8041f29c66ffa96fe31b02fd5f006776896e8765bb9d9535705602ed0337e0a8
7
- data.tar.gz: 95d4751859aec0fb9ad1adbcaaee2b30e178f67cfd7ba95d596ee4e0337ac02fdc88697f07db330f24c7f82c4ad33b4bd4aa0a0d6e1bb0f19e28f0e2b5d0aa3e
6
+ metadata.gz: 46d98f86cc24e7ca8db4c543fe34080c2571009e0715699be377fdd4a4589d0a99165c9d45ae2e2fbc432d2592231be7122d0c1c45bc77c5d351c497d1fee703
7
+ data.tar.gz: d8f0f6e49e6d5c7740f3d70f46860a425f1f9de3a91bdf927cec4579f87aac4357e5e0a6e148d7d9d58ed34a99ddc1ad57c40c0018e735110083f30a594d1ee4
data/README.md CHANGED
@@ -72,6 +72,11 @@ or `b1` is `false`
72
72
  * `(gt v1 v2)` — if any `v1` is greater than any `v2`
73
73
  * `(many v)` — if `v` has many values
74
74
  * `(one v)` — if `v` has one value
75
+
76
+ There are string manipulators:
77
+
78
+ * `(concat v1 v2 v3 ...)` — concatenates all `v`
79
+ * `(sprintf v v1 v2 ...)` — creates a string by `v` format with params
75
80
  * `(matches v s)` — if any `v` matches the `s` regular expression
76
81
 
77
82
  There are a few terms that return non-boolean values:
data/lib/factbase/term.rb CHANGED
@@ -95,7 +95,7 @@ class Factbase::Term
95
95
  def evaluate(fact, maps)
96
96
  send(@op, fact, maps)
97
97
  rescue NoMethodError => e
98
- raise "Term '#{@op}' is not defined at #{self}:\n#{Backtrace.new(e)}"
98
+ raise "Probably the term '#{@op}' is not defined at #{self}:\n#{Backtrace.new(e)}"
99
99
  rescue StandardError => e
100
100
  raise "#{e.message} at #{self}:\n#{Backtrace.new(e)}"
101
101
  end
@@ -36,10 +36,10 @@ module Factbase::Term::Ordering
36
36
  before
37
37
  end
38
38
 
39
- def unique(fact, _maps)
39
+ def unique(fact, maps)
40
40
  @uniques = [] if @uniques.nil?
41
41
  assert_args(1)
42
- vv = by_symbol(0, fact)
42
+ vv = the_values(0, fact, maps)
43
43
  return false if vv.nil?
44
44
  vv = [vv] unless vv.is_a?(Array)
45
45
  vv.each do |v|
@@ -28,6 +28,16 @@ require_relative '../../factbase'
28
28
  # Copyright:: Copyright (c) 2024 Yegor Bugayenko
29
29
  # License:: MIT
30
30
  module Factbase::Term::Strings
31
+ def concat(fact, maps)
32
+ (0..@operands.length - 1).map { |i| the_values(i, fact, maps)[0] }.join
33
+ end
34
+
35
+ def sprintf(fact, maps)
36
+ fmt = the_values(0, fact, maps)[0]
37
+ ops = (1..@operands.length - 1).map { |i| the_values(i, fact, maps)[0] }
38
+ format(*([fmt] + ops))
39
+ end
40
+
31
41
  def matches(fact, maps)
32
42
  assert_args(2)
33
43
  str = the_values(0, fact, maps)
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.58'
84
+ VERSION = '0.0.59'
85
85
 
86
86
  # An exception that may be thrown in a transaction, to roll it back.
87
87
  class Rollback < StandardError; end
@@ -23,7 +23,7 @@
23
23
  require 'minitest/autorun'
24
24
  require_relative '../../../lib/factbase/term'
25
25
 
26
- # Aggregates test.
26
+ # Math test.
27
27
  # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
28
  # Copyright:: Copyright (c) 2024 Yegor Bugayenko
29
29
  # License:: MIT
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2024 Yegor Bugayenko
4
+ #
5
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ # of this software and associated documentation files (the 'Software'), to deal
7
+ # in the Software without restriction, including without limitation the rights
8
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ # copies of the Software, and to permit persons to whom the Software is
10
+ # furnished to do so, subject to the following conditions:
11
+ #
12
+ # The above copyright notice and this permission notice shall be included in all
13
+ # copies or substantial portions of the Software.
14
+ #
15
+ # THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFINGEMENT. IN NO EVENT SHALL THE
18
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ # SOFTWARE.
22
+
23
+ require 'minitest/autorun'
24
+ require_relative '../../../lib/factbase/term'
25
+
26
+ # Strings test.
27
+ # Author:: Yegor Bugayenko (yegor256@gmail.com)
28
+ # Copyright:: Copyright (c) 2024 Yegor Bugayenko
29
+ # License:: MIT
30
+ class TestStrings < Minitest::Test
31
+ def test_concat
32
+ t = Factbase::Term.new(:concat, [42, 'hi', 3.14, Time.now])
33
+ assert(t.evaluate(fact, []).start_with?('42hi3.14'))
34
+ end
35
+
36
+ def test_concat_empty
37
+ t = Factbase::Term.new(:concat, [])
38
+ assert_equal('', t.evaluate(fact, []))
39
+ end
40
+
41
+ def test_sprintf
42
+ t = Factbase::Term.new(:sprintf, ['hi, %s!', 'Jeff'])
43
+ assert_equal('hi, Jeff!', t.evaluate(fact, []))
44
+ end
45
+
46
+ private
47
+
48
+ def fact(map = {})
49
+ Factbase::Fact.new(Mutex.new, map)
50
+ end
51
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.58
4
+ version: 0.0.59
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko
@@ -184,6 +184,7 @@ files:
184
184
  - test/factbase/terms/test_aggregates.rb
185
185
  - test/factbase/terms/test_aliases.rb
186
186
  - test/factbase/terms/test_math.rb
187
+ - test/factbase/terms/test_strings.rb
187
188
  - test/factbase/test_accum.rb
188
189
  - test/factbase/test_fact.rb
189
190
  - test/factbase/test_flatten.rb