factbase 0.0.1 → 0.0.2

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: 293bbd84f64af3f20536142ba6de6e76fc7846e7950b25ad2dc78e908a14b6dc
4
- data.tar.gz: d4371da72e71042ade69da947ca0cf4e8e79deda4bf4327b507a553f364dd386
3
+ metadata.gz: 870d9d422444751180a6e69d1be17c9f89ac46e168d7fc1023e7df22829f9134
4
+ data.tar.gz: 21e5886fc43c7f297a5f0dd4070d738efb4d6b2ff1f1b9d261d0007bf9ce483d
5
5
  SHA512:
6
- metadata.gz: 5e3c488b073a69319dcdd493eb25fdc8da65891da43c7f43e496c5c84f8c9faa110651917b7b4e7b8c29f7c40d0726b438f18dff4a94f5cdfdd6bc08ac79e286
7
- data.tar.gz: 8b693e2d32899eb6c3f1e3c98b6378b32f5f979d6c879c4107f5e092333a51859479c954f0e4e5d1dc0958ac3569571ad7da8cf8f5df92c4f926e0f7ba699516
6
+ metadata.gz: 91992d0fe70646084d7da8091ca5659a3f1aa64c474cfbf328278d40b0e5bc56233abb3b316435660ca3522afd3af275c29291b4f178136ef0544cf173a6d243
7
+ data.tar.gz: 97c605569af192e7f6960c0bac50777134acb917aa2085b6195d89be95687cde606084569db351025c7c0d4472247feb5f394af1e346a9f14c6af7d5422c2242
@@ -36,5 +36,3 @@ jobs:
36
36
  - uses: codecov/codecov-action@v4.0.0-beta.3
37
37
  with:
38
38
  token: ${{ secrets.CODECOV_TOKEN }}
39
- file: coverage/.resultset.json
40
- fail_ci_if_error: true
data/Gemfile CHANGED
@@ -29,4 +29,5 @@ gem 'rspec-rails', '6.1.2', require: false
29
29
  gem 'rubocop', '1.63.5', require: false
30
30
  gem 'rubocop-rspec', '2.29.2', require: false
31
31
  gem 'simplecov', '0.22.0', require: false
32
+ gem 'simplecov-cobertura', '2.1.0', require: false
32
33
  gem 'yard', '0.9.36', require: false
data/lib/factbase/term.rb CHANGED
@@ -55,10 +55,12 @@ class Factbase::Term
55
55
  private
56
56
 
57
57
  def nil(_map)
58
+ assert_args(0)
58
59
  true
59
60
  end
60
61
 
61
62
  def not(map)
63
+ assert_args(1)
62
64
  !@operands[0].matches?(map)
63
65
  end
64
66
 
@@ -77,23 +79,27 @@ class Factbase::Term
77
79
  end
78
80
 
79
81
  def exists(map)
82
+ assert_args(1)
80
83
  k = @operands[0].to_s
81
84
  !map[k].nil?
82
85
  end
83
86
 
84
87
  def absent(map)
88
+ assert_args(1)
85
89
  k = @operands[0].to_s
86
90
  map[k].nil?
87
91
  end
88
92
 
89
93
  def eq(map)
94
+ assert_args(2)
90
95
  k = @operands[0].to_s
91
96
  v = map[k]
92
97
  return false if v.nil?
93
- v[0] == @operands[1]
98
+ v.include?(@operands[1])
94
99
  end
95
100
 
96
101
  def lt(map)
102
+ assert_args(2)
97
103
  k = @operands[0].to_s
98
104
  v = map[k]
99
105
  return false if v.nil?
@@ -101,9 +107,15 @@ class Factbase::Term
101
107
  end
102
108
 
103
109
  def gt(map)
110
+ assert_args(2)
104
111
  k = @operands[0].to_s
105
112
  v = map[k]
106
113
  return false if v.nil?
107
114
  v[0] > @operands[1]
108
115
  end
116
+
117
+ def assert_args(num)
118
+ raise "Too many operands for '#{@op}'" if @operands.size > num
119
+ raise "Too few operands for '#{@op}'" if @operands.size < num
120
+ end
109
121
  end
data/lib/factbase.rb CHANGED
@@ -26,7 +26,7 @@
26
26
  # License:: MIT
27
27
  class Factbase
28
28
  # Current version of the library and of this class.
29
- VERSION = '0.0.1'
29
+ VERSION = '0.0.2'
30
30
 
31
31
  # Constructor.
32
32
  def initialize
@@ -77,6 +77,10 @@ class Factbase
77
77
  @maps += Marshal.load(bytes)
78
78
  # rubocop:enable Security/MarshalLoad
79
79
  end
80
+
81
+ def to_json(_ = nil)
82
+ @maps.to_json
83
+ end
80
84
  end
81
85
 
82
86
  require_relative 'factbase/fact'
@@ -36,6 +36,12 @@ class TestTerm < Minitest::Test
36
36
  assert(!t.matches?({ 'bar' => ['Hello!'] }))
37
37
  end
38
38
 
39
+ def test_eq_matching
40
+ t = Factbase::Term.new(:eq, ['foo', 42])
41
+ assert(t.matches?({ 'foo' => [10, 5, 6, -8, 'hey', 42, 9, 'fdsf'] }))
42
+ assert(!t.matches?({ 'foo' => [100] }))
43
+ end
44
+
39
45
  def test_lt_matching
40
46
  t = Factbase::Term.new(:lt, ['foo', 42])
41
47
  assert(t.matches?({ 'foo' => [10] }))
@@ -53,6 +59,12 @@ class TestTerm < Minitest::Test
53
59
  assert(!t.matches?({ 'foo' => [100] }))
54
60
  end
55
61
 
62
+ def test_not_exists_matching
63
+ t = Factbase::Term.new(:not, [Factbase::Term.new(:eq, ['foo', 100])])
64
+ assert(t.matches?({ 'foo' => [42, 12, -90] }))
65
+ assert(!t.matches?({ 'foo' => [100] }))
66
+ end
67
+
56
68
  def test_or_matching
57
69
  t = Factbase::Term.new(
58
70
  :or,
data/test/test__helper.rb CHANGED
@@ -26,5 +26,7 @@ $stdout.sync = true
26
26
  require 'simplecov'
27
27
  SimpleCov.start
28
28
 
29
+ require 'simplecov-cobertura'
30
+ SimpleCov.formatter = SimpleCov::Formatter::CoberturaFormatter
31
+
29
32
  require 'minitest/autorun'
30
- require_relative '../lib/factbase'
@@ -22,6 +22,7 @@
22
22
  # SOFTWARE.
23
23
 
24
24
  require 'minitest/autorun'
25
+ require 'json'
25
26
  require_relative '../lib/factbase'
26
27
 
27
28
  # Factbase main module test.
@@ -53,4 +54,13 @@ class TestFactbase < Minitest::Test
53
54
  end
54
55
  assert_equal(1, f2.query('(eq foo 42)').to_a.count)
55
56
  end
57
+
58
+ def test_to_json
59
+ fb = Factbase.new
60
+ f = fb.insert
61
+ f.foo = 42
62
+ f.foo = 256
63
+ json = JSON.parse(fb.to_json)
64
+ assert(42, json[0]['foo'][1])
65
+ end
56
66
  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.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko