factbase 0.0.47 → 0.0.49
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 +4 -4
- data/Gemfile.lock +21 -19
- data/factbase.gemspec +4 -3
- data/lib/factbase/flatten.rb +2 -1
- data/lib/factbase/looged.rb +5 -1
- data/lib/factbase/term.rb +1 -0
- data/lib/factbase/to_json.rb +1 -1
- data/lib/factbase/to_xml.rb +1 -1
- data/lib/factbase/to_yaml.rb +1 -1
- data/lib/factbase.rb +1 -1
- data/test/factbase/test_flatten.rb +2 -2
- data/test/factbase/test_looged.rb +8 -0
- data/test/factbase/test_query.rb +5 -1
- data/test/factbase/test_term.rb +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 19ec04ca7c6bf83d50a09c6325e396685e6eb0d2590a4ffca5ccee1fcafa45f1
|
|
4
|
+
data.tar.gz: 3550dd7bff7f9ad854689b5c78571211454bf34c09ec0b32fd4b240fc509939c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5d2aa256c677f5d93fb9d41cfbe2548d83ebce3490da521d4a920f06ec774305c5850dc4dea71c76df2e2cda827db3c0292b21f0dae8dc9cee136e6e4cdfb3d3
|
|
7
|
+
data.tar.gz: 0e96d7968129d750e5e71940ff5f114bdd920b7ae417ad87cbcea1ef7746c66142c9f1e312980a08cdf2e4ec259747ea6da7f268b6f70c4292225a3b4e6d775d
|
data/Gemfile.lock
CHANGED
|
@@ -5,14 +5,15 @@ PATH
|
|
|
5
5
|
json (~> 2.7)
|
|
6
6
|
loog (~> 0.2)
|
|
7
7
|
nokogiri (~> 1.10)
|
|
8
|
+
tago (~> 0.0)
|
|
8
9
|
yaml (~> 0.3)
|
|
9
10
|
|
|
10
11
|
GEM
|
|
11
12
|
remote: https://rubygems.org/
|
|
12
13
|
specs:
|
|
13
|
-
actionpack (7.1.3.
|
|
14
|
-
actionview (= 7.1.3.
|
|
15
|
-
activesupport (= 7.1.3.
|
|
14
|
+
actionpack (7.1.3.4)
|
|
15
|
+
actionview (= 7.1.3.4)
|
|
16
|
+
activesupport (= 7.1.3.4)
|
|
16
17
|
nokogiri (>= 1.8.5)
|
|
17
18
|
racc
|
|
18
19
|
rack (>= 2.2.4)
|
|
@@ -20,13 +21,13 @@ GEM
|
|
|
20
21
|
rack-test (>= 0.6.3)
|
|
21
22
|
rails-dom-testing (~> 2.2)
|
|
22
23
|
rails-html-sanitizer (~> 1.6)
|
|
23
|
-
actionview (7.1.3.
|
|
24
|
-
activesupport (= 7.1.3.
|
|
24
|
+
actionview (7.1.3.4)
|
|
25
|
+
activesupport (= 7.1.3.4)
|
|
25
26
|
builder (~> 3.1)
|
|
26
27
|
erubi (~> 1.11)
|
|
27
28
|
rails-dom-testing (~> 2.2)
|
|
28
29
|
rails-html-sanitizer (~> 1.6)
|
|
29
|
-
activesupport (7.1.3.
|
|
30
|
+
activesupport (7.1.3.4)
|
|
30
31
|
base64
|
|
31
32
|
bigdecimal
|
|
32
33
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
@@ -39,8 +40,8 @@ GEM
|
|
|
39
40
|
ast (2.4.2)
|
|
40
41
|
base64 (0.2.0)
|
|
41
42
|
bigdecimal (3.1.8)
|
|
42
|
-
builder (3.
|
|
43
|
-
concurrent-ruby (1.
|
|
43
|
+
builder (3.3.0)
|
|
44
|
+
concurrent-ruby (1.3.3)
|
|
44
45
|
connection_pool (2.4.1)
|
|
45
46
|
crass (1.0.6)
|
|
46
47
|
diff-lcs (1.5.1)
|
|
@@ -69,14 +70,14 @@ GEM
|
|
|
69
70
|
racc (~> 1.4)
|
|
70
71
|
nokogiri (1.16.5-x86_64-linux)
|
|
71
72
|
racc (~> 1.4)
|
|
72
|
-
parallel (1.
|
|
73
|
+
parallel (1.25.1)
|
|
73
74
|
parser (3.3.2.0)
|
|
74
75
|
ast (~> 2.4.1)
|
|
75
76
|
racc
|
|
76
77
|
psych (5.1.2)
|
|
77
78
|
stringio
|
|
78
79
|
racc (1.8.0)
|
|
79
|
-
rack (3.0
|
|
80
|
+
rack (3.1.0)
|
|
80
81
|
rack-session (2.0.0)
|
|
81
82
|
rack (>= 3.0.0)
|
|
82
83
|
rack-test (2.1.0)
|
|
@@ -91,9 +92,9 @@ GEM
|
|
|
91
92
|
rails-html-sanitizer (1.6.0)
|
|
92
93
|
loofah (~> 2.21)
|
|
93
94
|
nokogiri (~> 1.14)
|
|
94
|
-
railties (7.1.3.
|
|
95
|
-
actionpack (= 7.1.3.
|
|
96
|
-
activesupport (= 7.1.3.
|
|
95
|
+
railties (7.1.3.4)
|
|
96
|
+
actionpack (= 7.1.3.4)
|
|
97
|
+
activesupport (= 7.1.3.4)
|
|
97
98
|
irb
|
|
98
99
|
rackup (>= 1.0.0)
|
|
99
100
|
rake (>= 12.2)
|
|
@@ -104,10 +105,10 @@ GEM
|
|
|
104
105
|
rdoc (6.7.0)
|
|
105
106
|
psych (>= 4.0.0)
|
|
106
107
|
regexp_parser (2.9.2)
|
|
107
|
-
reline (0.5.
|
|
108
|
+
reline (0.5.8)
|
|
108
109
|
io-console (~> 0.5)
|
|
109
|
-
rexml (3.
|
|
110
|
-
strscan
|
|
110
|
+
rexml (3.3.0)
|
|
111
|
+
strscan
|
|
111
112
|
rspec-core (3.13.0)
|
|
112
113
|
rspec-support (~> 3.13.0)
|
|
113
114
|
rspec-expectations (3.13.0)
|
|
@@ -138,9 +139,9 @@ GEM
|
|
|
138
139
|
unicode-display_width (>= 2.4.0, < 3.0)
|
|
139
140
|
rubocop-ast (1.31.3)
|
|
140
141
|
parser (>= 3.3.1.0)
|
|
141
|
-
rubocop-capybara (2.
|
|
142
|
+
rubocop-capybara (2.21.0)
|
|
142
143
|
rubocop (~> 1.41)
|
|
143
|
-
rubocop-factory_bot (2.
|
|
144
|
+
rubocop-factory_bot (2.26.0)
|
|
144
145
|
rubocop (~> 1.41)
|
|
145
146
|
rubocop-performance (1.21.0)
|
|
146
147
|
rubocop (>= 1.48.1, < 2.0)
|
|
@@ -150,7 +151,7 @@ GEM
|
|
|
150
151
|
rubocop-capybara (~> 2.17)
|
|
151
152
|
rubocop-factory_bot (~> 2.22)
|
|
152
153
|
rubocop-rspec_rails (~> 2.28)
|
|
153
|
-
rubocop-rspec_rails (2.
|
|
154
|
+
rubocop-rspec_rails (2.29.0)
|
|
154
155
|
rubocop (~> 1.40)
|
|
155
156
|
ruby-progressbar (1.13.0)
|
|
156
157
|
simplecov (0.22.0)
|
|
@@ -164,6 +165,7 @@ GEM
|
|
|
164
165
|
simplecov_json_formatter (0.1.4)
|
|
165
166
|
stringio (3.1.0)
|
|
166
167
|
strscan (3.1.0)
|
|
168
|
+
tago (0.0.1)
|
|
167
169
|
thor (1.3.1)
|
|
168
170
|
tzinfo (2.0.6)
|
|
169
171
|
concurrent-ruby (~> 1.0)
|
data/factbase.gemspec
CHANGED
|
@@ -42,9 +42,10 @@ Gem::Specification.new do |s|
|
|
|
42
42
|
s.files = `git ls-files`.split($RS)
|
|
43
43
|
s.rdoc_options = ['--charset=UTF-8']
|
|
44
44
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
|
45
|
-
s.add_runtime_dependency 'json', '~>
|
|
45
|
+
s.add_runtime_dependency 'json', '~>2.7'
|
|
46
46
|
s.add_runtime_dependency 'loog', '~>0.2'
|
|
47
|
-
s.add_runtime_dependency 'nokogiri', '~>
|
|
48
|
-
s.add_runtime_dependency '
|
|
47
|
+
s.add_runtime_dependency 'nokogiri', '~>1.10'
|
|
48
|
+
s.add_runtime_dependency 'tago', '~>0.0'
|
|
49
|
+
s.add_runtime_dependency 'yaml', '~>0.3'
|
|
49
50
|
s.metadata['rubygems_mfa_required'] = 'true'
|
|
50
51
|
end
|
data/lib/factbase/flatten.rb
CHANGED
data/lib/factbase/looged.rb
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
require 'time'
|
|
24
24
|
require 'loog'
|
|
25
|
+
require 'tago'
|
|
25
26
|
require_relative 'syntax'
|
|
26
27
|
|
|
27
28
|
# A decorator of a Factbase, that logs all operations.
|
|
@@ -59,6 +60,9 @@ class Factbase::Looged
|
|
|
59
60
|
tail = Factbase::Looged.elapsed do
|
|
60
61
|
yield fbt
|
|
61
62
|
end
|
|
63
|
+
rescue Factbase::Rollback => e
|
|
64
|
+
@loog.debug('Txn rolled back')
|
|
65
|
+
raise e
|
|
62
66
|
end
|
|
63
67
|
@loog.debug("Txn #{r ? 'modified' : 'didn\'t touch'} #{before} facts #{tail}")
|
|
64
68
|
r
|
|
@@ -172,6 +176,6 @@ class Factbase::Looged
|
|
|
172
176
|
def self.elapsed
|
|
173
177
|
start = Time.now
|
|
174
178
|
yield
|
|
175
|
-
"in #{
|
|
179
|
+
"in #{start.ago}"
|
|
176
180
|
end
|
|
177
181
|
end
|
data/lib/factbase/term.rb
CHANGED
data/lib/factbase/to_json.rb
CHANGED
|
@@ -45,6 +45,6 @@ class Factbase::ToJSON
|
|
|
45
45
|
# Convert the entire factbase into JSON.
|
|
46
46
|
# @return [String] The factbase in JSON format
|
|
47
47
|
def json
|
|
48
|
-
Factbase::Flatten.new(Marshal.load(@fb.export)).it.to_json
|
|
48
|
+
Factbase::Flatten.new(Marshal.load(@fb.export), @sorter).it.to_json
|
|
49
49
|
end
|
|
50
50
|
end
|
data/lib/factbase/to_xml.rb
CHANGED
|
@@ -53,7 +53,7 @@ class Factbase::ToXML
|
|
|
53
53
|
}
|
|
54
54
|
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
|
55
55
|
xml.fb(meta) do
|
|
56
|
-
Factbase::Flatten.new(Marshal.load(bytes)).it.each do |m|
|
|
56
|
+
Factbase::Flatten.new(Marshal.load(bytes), @sorter).it.each do |m|
|
|
57
57
|
xml.f_ do
|
|
58
58
|
m.sort.to_h.each do |k, vv|
|
|
59
59
|
if vv.is_a?(Array)
|
data/lib/factbase/to_yaml.rb
CHANGED
|
@@ -45,6 +45,6 @@ class Factbase::ToYAML
|
|
|
45
45
|
# Convert the entire factbase into YAML.
|
|
46
46
|
# @return [String] The factbase in YAML format
|
|
47
47
|
def yaml
|
|
48
|
-
YAML.dump(Factbase::Flatten.new(Marshal.load(@fb.export)).it)
|
|
48
|
+
YAML.dump(Factbase::Flatten.new(Marshal.load(@fb.export), @sorter).it)
|
|
49
49
|
end
|
|
50
50
|
end
|
data/lib/factbase.rb
CHANGED
|
@@ -79,7 +79,7 @@ require 'yaml'
|
|
|
79
79
|
# License:: MIT
|
|
80
80
|
class Factbase
|
|
81
81
|
# Current version of the gem (changed by .rultor.yml on every release)
|
|
82
|
-
VERSION = '0.0.
|
|
82
|
+
VERSION = '0.0.49'
|
|
83
83
|
|
|
84
84
|
# An exception that may be thrown in a transaction, to roll it back.
|
|
85
85
|
class Rollback < StandardError; end
|
|
@@ -30,8 +30,8 @@ require_relative '../../lib/factbase/flatten'
|
|
|
30
30
|
# License:: MIT
|
|
31
31
|
class TestFlatten < Minitest::Test
|
|
32
32
|
def test_mapping
|
|
33
|
-
maps = [{ 'b' => [42] }, { 'a' => 33 }, { 'c' => %w[hey you] }]
|
|
34
|
-
to = Factbase::Flatten.new(maps).it
|
|
33
|
+
maps = [{ 'b' => [42], 'i' => 1 }, { 'a' => 33, 'i' => 0 }, { 'c' => %w[hey you], 'i' => 2 }]
|
|
34
|
+
to = Factbase::Flatten.new(maps, 'i').it
|
|
35
35
|
assert(33, to[0]['a'])
|
|
36
36
|
assert(42, to[1]['b'])
|
|
37
37
|
assert(2, to[2]['c'].size)
|
|
@@ -57,6 +57,14 @@ class TestLooged < Minitest::Test
|
|
|
57
57
|
assert(log.to_s.include?('modified'), log)
|
|
58
58
|
end
|
|
59
59
|
|
|
60
|
+
def test_with_txn_rollback
|
|
61
|
+
log = Loog::Buffer.new
|
|
62
|
+
fb = Factbase::Looged.new(Factbase.new, log)
|
|
63
|
+
assert(!fb.txn { raise Factbase::Rollback })
|
|
64
|
+
assert_equal(0, fb.size)
|
|
65
|
+
assert(log.to_s.include?('rolled back'), log)
|
|
66
|
+
end
|
|
67
|
+
|
|
60
68
|
def test_with_modifying_txn
|
|
61
69
|
log = Loog::Buffer.new
|
|
62
70
|
fb = Factbase::Looged.new(Factbase.new, log)
|
data/test/factbase/test_query.rb
CHANGED
|
@@ -46,16 +46,19 @@ class TestQuery < Minitest::Test
|
|
|
46
46
|
maps = []
|
|
47
47
|
maps << { 'num' => 42, 'name' => 'Jeff' }
|
|
48
48
|
maps << { 'pi' => 3.14, 'num' => [42, 66, 0], 'name' => 'peter' }
|
|
49
|
-
maps << { 'time' => Time.now - 100, 'num' => 0 }
|
|
49
|
+
maps << { 'time' => Time.now - 100, 'num' => 0, 'hi' => [4], 'nome' => ['Walter'] }
|
|
50
50
|
{
|
|
51
51
|
'(eq num 444)' => 0,
|
|
52
|
+
'(eq hi 4)' => 1,
|
|
52
53
|
'(eq time 0)' => 0,
|
|
53
54
|
'(gt num 60)' => 1,
|
|
55
|
+
'(gt hi 3)' => 1,
|
|
54
56
|
"(and (lt pi 100) \n\n (gt num 1000))" => 0,
|
|
55
57
|
'(exists pi)' => 1,
|
|
56
58
|
'(eq pi +3.14)' => 1,
|
|
57
59
|
'(not (exists hello))' => 3,
|
|
58
60
|
'(eq "Integer" (type num))' => 2,
|
|
61
|
+
'(eq "Integer" (type hi))' => 1,
|
|
59
62
|
'(when (eq num 0) (exists time))' => 2,
|
|
60
63
|
'(unique num)' => 2,
|
|
61
64
|
'(unique name)' => 2,
|
|
@@ -69,6 +72,7 @@ class TestQuery < Minitest::Test
|
|
|
69
72
|
'(and (one pi) (eq pi (div -6.28 -2)))' => 1,
|
|
70
73
|
'(gt (size num) 2)' => 1,
|
|
71
74
|
'(matches name "^[a-z]+$")' => 1,
|
|
75
|
+
'(matches nome "^Walter$")' => 1,
|
|
72
76
|
'(lt (size num) 2)' => 2,
|
|
73
77
|
'(eq (size _hello) 0)' => 3,
|
|
74
78
|
'(eq num pi)' => 0,
|
data/test/factbase/test_term.rb
CHANGED
|
@@ -120,6 +120,7 @@ class TestTerm < Minitest::Test
|
|
|
120
120
|
def test_type_matching
|
|
121
121
|
t = Factbase::Term.new(:type, [:foo])
|
|
122
122
|
assert_equal('Integer', t.evaluate(fact('foo' => 42), []))
|
|
123
|
+
assert_equal('Integer', t.evaluate(fact('foo' => [42]), []))
|
|
123
124
|
assert_equal('Array', t.evaluate(fact('foo' => [1, 2, 3]), []))
|
|
124
125
|
assert_equal('String', t.evaluate(fact('foo' => 'Hello, world!'), []))
|
|
125
126
|
assert_equal('Float', t.evaluate(fact('foo' => 3.14), []))
|
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.
|
|
4
|
+
version: 0.0.49
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Yegor Bugayenko
|
|
@@ -52,6 +52,20 @@ dependencies:
|
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '1.10'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: tago
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0.0'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0.0'
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: yaml
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|