factbase 0.0.19 → 0.0.21

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: bf6bf5824dca2b686d94a18b4341e2fbcd08adf286e228043418c98e2633673a
4
- data.tar.gz: e37dcd3ad0fc483ed24586e353bc48d9afc6ec42384ef39f0cab9d30a85ede93
3
+ metadata.gz: dd8e28cf7e8e84fc0364bb8780775592aa86c415a05a49d4edd88bbc9a717a80
4
+ data.tar.gz: ba7c821a3d229cb5f8b0e9fd1e632cd6d2e69c33eacb6b49751a5dd92902a23a
5
5
  SHA512:
6
- metadata.gz: 00d59f7a614600ba776343545188b3ba4a0ea5f6f4470da577cd7506b6286a1f28f6232c03d47425d235132d9d1d694d5a212dcfd0ffcf3096269e1da900b6ab
7
- data.tar.gz: 4572157aab7d5d5844905a1bee96e002233efdbf2667c245438c746f765c8c9aa41ede733c6c24ec9fa01728304a2e9b8d5e18d4d46ac0a04bd8d8666d70178c
6
+ metadata.gz: 897308019e1fb3e05bad6e47ac06c39ec91250981e1b0206600a9a5620cb03b29c9dac866640994ac077e6bc3c418b5ea8aec7878e1e2b4587bab6d77b2cffb7
7
+ data.tar.gz: 50172f65e3b8e40a30ec37155264c464b6a2849152ff9752270a38e8610c022506cd4b69cc1ed6869b2b8ecaa6056e3976d48a73642b067ffaedfc28ad887959
data/factbase.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.required_rubygems_version = Gem::Requirement.new('>= 0') if s.respond_to? :required_rubygems_version=
27
27
  s.required_ruby_version = '>=2.3'
28
28
  s.name = 'factbase'
29
- s.version = '0.0.19'
29
+ s.version = '0.0.21'
30
30
  s.license = 'MIT'
31
31
  s.summary = 'Factbase'
32
32
  s.description = 'Fact base in memory and on disc'
@@ -85,7 +85,7 @@ class Factbase::Looged
85
85
  r = @fact.method_missing(*args)
86
86
  k = args[0].to_s
87
87
  v = args[1]
88
- @loog.debug("Set '#{k[0..-2]}' to '#{v.to_s.inspect}' (#{v.class})") if k.end_with?('=')
88
+ @loog.debug("Set '#{k[0..-2]}' to #{v.to_s.inspect} (#{v.class})") if k.end_with?('=')
89
89
  r
90
90
  end
91
91
 
@@ -109,19 +109,34 @@ class Factbase::Looged
109
109
  end
110
110
 
111
111
  def each(&)
112
- r = @query.each(&)
113
- raise 'Invalid return from query.each' unless r.is_a?(Integer)
114
- if r.zero?
115
- @loog.debug("Nothing found by '#{@expr}'")
112
+ if block_given?
113
+ r = @query.each(&)
114
+ raise ".each of #{@query.class} returned #{r.class}" unless r.is_a?(Integer)
115
+ if r.zero?
116
+ @loog.debug("Nothing found by '#{@expr}'")
117
+ else
118
+ @loog.debug("Found #{r} fact(s) by '#{@expr}'")
119
+ end
120
+ r
116
121
  else
117
- @loog.debug("Found #{r} fact(s) by '#{@expr}'")
122
+ array = []
123
+ # rubocop:disable Style/MapIntoArray
124
+ @query.each do |f|
125
+ array << f
126
+ end
127
+ # rubocop:enable Style/MapIntoArray
128
+ if array.empty?
129
+ @loog.debug("Nothing found by '#{@expr}'")
130
+ else
131
+ @loog.debug("Found #{array.size} fact(s) by '#{@expr}'")
132
+ end
133
+ array
118
134
  end
119
- r
120
135
  end
121
136
 
122
137
  def delete!
123
138
  r = @query.delete!
124
- raise 'Invalid return from query.delete!' unless r.is_a?(Integer)
139
+ raise ".delete! of #{@query.class} returned #{r.class}" unless r.is_a?(Integer)
125
140
  if r.zero?
126
141
  @loog.debug("Nothing deleted by '#{@expr}'")
127
142
  else
data/lib/factbase/term.rb CHANGED
@@ -124,7 +124,10 @@ class Factbase::Term
124
124
  v = fact[k]
125
125
  return false if v.nil?
126
126
  v = [v] unless v.is_a?(Array)
127
- v.any? { |vv| vv.send(op, @operands[1]) }
127
+ v.any? do |vv|
128
+ vv = vv.floor if vv.is_a?(Time) && op == :==
129
+ vv.send(op, @operands[1])
130
+ end
128
131
  end
129
132
 
130
133
  def assert_args(num)
@@ -51,6 +51,18 @@ class TestLooged < Minitest::Test
51
51
  assert_equal(2, Factbase::Looged.new(fb, Loog::NULL).query('()').each(&:to_s))
52
52
  end
53
53
 
54
+ def test_returns_int_when_empty
55
+ fb = Factbase.new
56
+ assert_equal(0, Factbase::Looged.new(fb, Loog::NULL).query('()').each(&:to_s))
57
+ end
58
+
59
+ def test_logs_when_enumerator
60
+ fb = Factbase::Looged.new(Factbase.new, Loog::NULL)
61
+ assert_equal(0, fb.query('()').each.to_a.size)
62
+ fb.insert
63
+ assert_equal(1, fb.query('()').each.to_a.size)
64
+ end
65
+
54
66
  def test_proper_logging
55
67
  log = Loog::Buffer.new
56
68
  fb = Factbase::Looged.new(Factbase.new, log)
@@ -62,7 +74,7 @@ class TestLooged < Minitest::Test
62
74
  [
63
75
  'Inserted fact #1',
64
76
  'Inserted fact #2',
65
- 'Set \'bar\' to \'"3"\' (Integer)',
77
+ 'Set \'bar\' to "3" (Integer)',
66
78
  'Found 1 fact(s) by \'(exists bar)\'',
67
79
  'Deleted 2 fact(s) by \'(not (exists bar))\''
68
80
  ].each do |s|
@@ -21,6 +21,7 @@
21
21
  # SOFTWARE.
22
22
 
23
23
  require 'minitest/autorun'
24
+ require 'time'
24
25
  require_relative '../../lib/factbase'
25
26
  require_relative '../../lib/factbase/query'
26
27
 
@@ -62,6 +63,14 @@ class TestQuery < Minitest::Test
62
63
  end
63
64
  end
64
65
 
66
+ def test_simple_parsing_with_time
67
+ maps = []
68
+ now = Time.now.utc
69
+ maps << { 'foo' => now }
70
+ q = Factbase::Query.new(maps, Mutex.new, "(eq foo #{now.iso8601})")
71
+ assert_equal(1, q.each.to_a.size)
72
+ end
73
+
65
74
  def test_simple_deleting
66
75
  maps = []
67
76
  maps << { 'foo' => [42] }
@@ -44,6 +44,13 @@ class TestTerm < Minitest::Test
44
44
  assert(!t.matches?(fact('bar' => [])))
45
45
  end
46
46
 
47
+ def test_eq_matching_time
48
+ now = Time.now
49
+ t = Factbase::Term.new(:eq, [:foo, Time.parse(now.iso8601)])
50
+ assert(t.matches?(fact('foo' => now)))
51
+ assert(t.matches?(fact('foo' => [now, Time.now])))
52
+ end
53
+
47
54
  def test_lt_matching
48
55
  t = Factbase::Term.new(:lt, [:foo, 42])
49
56
  assert(t.matches?(fact('foo' => [10])))
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.19
4
+ version: 0.0.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko