judges 0.0.28 → 0.0.30
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 +2 -2
- data/Rakefile +1 -0
- data/bin/judges +11 -1
- data/features/import.feature +17 -0
- data/features/print.feature +9 -4
- data/judges.gemspec +2 -2
- data/lib/judges/commands/import.rb +2 -0
- data/lib/judges/commands/print.rb +10 -2
- data/test/commands/test_print.rb +15 -0
- metadata +5 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2966161948e1ac2ed8c36b5f0e515183a9f8ea02d6ddabf396e7bd5db98ca787
|
|
4
|
+
data.tar.gz: 227712553b74473211e835d5c1df9afbf03e00d8942639d137fea6d98d40a236
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 120d2cec10fbca12aa6a9107ea348236dd44e999a8499dbef93952cb2fb313ea11bb67c658d0ebb6b6ee4f002383d2f8177d75d06bd8cb01d547032222e6b9aa
|
|
7
|
+
data.tar.gz: 3cf907ef01704e0e11ffa8313226420536436571ab11ea9a25cf4d8c7cbc98e334cbb7e193ea5994910c36c20dcf29d0ae1d1fee040cefca9c7b5d2c0ec91a33
|
data/Gemfile.lock
CHANGED
|
@@ -3,7 +3,7 @@ PATH
|
|
|
3
3
|
specs:
|
|
4
4
|
judges (0.0.0)
|
|
5
5
|
backtrace (~> 0.3)
|
|
6
|
-
factbase (~> 0.0.
|
|
6
|
+
factbase (~> 0.0.29)
|
|
7
7
|
gli (~> 2.21)
|
|
8
8
|
loog (~> 0.2)
|
|
9
9
|
nokogiri (~> 1.10)
|
|
@@ -74,7 +74,7 @@ GEM
|
|
|
74
74
|
docile (1.4.0)
|
|
75
75
|
drb (2.2.1)
|
|
76
76
|
erubi (1.12.0)
|
|
77
|
-
factbase (0.0.
|
|
77
|
+
factbase (0.0.29)
|
|
78
78
|
json (~> 2.7)
|
|
79
79
|
loog (~> 0.2)
|
|
80
80
|
nokogiri (~> 1.10)
|
data/Rakefile
CHANGED
data/bin/judges
CHANGED
|
@@ -32,7 +32,7 @@ Encoding.default_internal = Encoding::UTF_8
|
|
|
32
32
|
class App
|
|
33
33
|
extend GLI::App
|
|
34
34
|
|
|
35
|
-
ver = '0.0.
|
|
35
|
+
ver = '0.0.30'
|
|
36
36
|
|
|
37
37
|
loog = Loog::REGULAR
|
|
38
38
|
|
|
@@ -87,6 +87,14 @@ class App
|
|
|
87
87
|
end
|
|
88
88
|
end
|
|
89
89
|
|
|
90
|
+
desc 'Import YAML into a factbase'
|
|
91
|
+
command :import do |c|
|
|
92
|
+
c.action do |global, options, args|
|
|
93
|
+
require_relative '../lib/judges/commands/import'
|
|
94
|
+
Judges::Import.new(loog).run(options, args)
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
90
98
|
desc 'Remove the facts that are too old'
|
|
91
99
|
command :trim do |c|
|
|
92
100
|
c.desc 'Only the facts that match the expression are deleted'
|
|
@@ -107,6 +115,8 @@ class App
|
|
|
107
115
|
c.switch([:auto], default_value: false)
|
|
108
116
|
c.desc 'Only the facts that match the expression are printed'
|
|
109
117
|
c.flag([:query], default_value: '()')
|
|
118
|
+
c.desc 'Print even if target file already exists and is older than the factbase'
|
|
119
|
+
c.switch([:force], default_value: false)
|
|
110
120
|
c.action do |global, options, args|
|
|
111
121
|
require_relative '../lib/judges/commands/print'
|
|
112
122
|
Judges::Print.new(loog).run(options, args)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
Feature: Import
|
|
2
|
+
I want to import YAML into a factbase
|
|
3
|
+
|
|
4
|
+
Scenario: Simple import of a small YAML
|
|
5
|
+
Given I make a temp directory
|
|
6
|
+
Then I have a "simple.yaml" file with content:
|
|
7
|
+
"""
|
|
8
|
+
-
|
|
9
|
+
foo: 42
|
|
10
|
+
bar: 2024-03-04T22:22:22Z
|
|
11
|
+
t: Hello, world!
|
|
12
|
+
-
|
|
13
|
+
z: 3.14
|
|
14
|
+
"""
|
|
15
|
+
Then I run bin/judges with "--verbose import simple.yaml simple.fb"
|
|
16
|
+
Then Stdout contains "Import finished"
|
|
17
|
+
And Exit code is zero
|
data/features/print.feature
CHANGED
|
@@ -4,7 +4,6 @@ Feature: Print
|
|
|
4
4
|
Scenario: Simple print of a small factbase, to YAML
|
|
5
5
|
Given I make a temp directory
|
|
6
6
|
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 42'"
|
|
7
|
-
Then I run bin/judges with "update . simple.fb"
|
|
8
7
|
Then I run bin/judges with "print --format=yaml simple.fb simple.yml"
|
|
9
8
|
Then Stdout contains "printed"
|
|
10
9
|
And Exit code is zero
|
|
@@ -12,7 +11,6 @@ Feature: Print
|
|
|
12
11
|
Scenario: Simple print of a small factbase, to JSON
|
|
13
12
|
Given I make a temp directory
|
|
14
13
|
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 42'"
|
|
15
|
-
Then I run bin/judges with "update . simple.fb"
|
|
16
14
|
Then I run bin/judges with "print --format=json simple.fb simple.json"
|
|
17
15
|
Then Stdout contains "printed"
|
|
18
16
|
And Exit code is zero
|
|
@@ -20,7 +18,6 @@ Feature: Print
|
|
|
20
18
|
Scenario: Simple print of a small factbase, to XML
|
|
21
19
|
Given I make a temp directory
|
|
22
20
|
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 42'"
|
|
23
|
-
Then I run bin/judges with "update . simple.fb"
|
|
24
21
|
Then I run bin/judges with "print --format=xml --auto simple.fb"
|
|
25
22
|
Then Stdout contains "printed"
|
|
26
23
|
And Exit code is zero
|
|
@@ -29,7 +26,15 @@ Feature: Print
|
|
|
29
26
|
Given I make a temp directory
|
|
30
27
|
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 42'"
|
|
31
28
|
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 43'"
|
|
32
|
-
Then I run bin/judges with "update . simple.fb"
|
|
33
29
|
Then I run bin/judges with "print '--query=(eq foo 43)' --auto simple.fb"
|
|
34
30
|
Then Stdout contains "printed"
|
|
35
31
|
And Exit code is zero
|
|
32
|
+
|
|
33
|
+
Scenario: Print twice, without --force
|
|
34
|
+
Given I make a temp directory
|
|
35
|
+
Then I run bin/judges with "--verbose eval simple.fb '$fb.insert.foo = 42'"
|
|
36
|
+
Then I run bin/judges with "print --auto simple.fb"
|
|
37
|
+
Then Stdout contains "printed"
|
|
38
|
+
Then I run bin/judges with "print --auto simple.fb"
|
|
39
|
+
Then Stdout contains "No need to print"
|
|
40
|
+
And Exit code is zero
|
data/judges.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 = '>=3.2'
|
|
28
28
|
s.name = 'judges'
|
|
29
|
-
s.version = '0.0.
|
|
29
|
+
s.version = '0.0.30'
|
|
30
30
|
s.license = 'MIT'
|
|
31
31
|
s.summary = 'Command-Line Tool for a Factbase'
|
|
32
32
|
s.description = '
|
|
@@ -42,7 +42,7 @@ Gem::Specification.new do |s|
|
|
|
42
42
|
s.rdoc_options = ['--charset=UTF-8']
|
|
43
43
|
s.extra_rdoc_files = ['README.md', 'LICENSE.txt']
|
|
44
44
|
s.add_runtime_dependency 'backtrace', '~> 0.3'
|
|
45
|
-
s.add_runtime_dependency 'factbase', '~>0.0.
|
|
45
|
+
s.add_runtime_dependency 'factbase', '~>0.0.29'
|
|
46
46
|
s.add_runtime_dependency 'gli', '~>2.21'
|
|
47
47
|
s.add_runtime_dependency 'loog', '~>0.2'
|
|
48
48
|
s.add_runtime_dependency 'nokogiri', '~> 1.10'
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
# SOFTWARE.
|
|
22
22
|
|
|
23
23
|
require 'time'
|
|
24
|
+
require 'factbase/looged'
|
|
24
25
|
require_relative '../../judges'
|
|
25
26
|
require_relative '../../judges/impex'
|
|
26
27
|
require_relative '../../judges/to_rel'
|
|
@@ -39,6 +40,7 @@ class Judges::Import
|
|
|
39
40
|
raise "File not found #{args[0].to_rel}" unless File.exist?(args[0])
|
|
40
41
|
start = Time.now
|
|
41
42
|
yaml = YAML.load_file(args[0], permitted_classes: [Time])
|
|
43
|
+
@loog.info("YAML loaded from #{args[0].to_rel} (#{yaml.size} facts)")
|
|
42
44
|
impex = Judges::Impex.new(@loog, args[1])
|
|
43
45
|
fb = impex.import(strict: false)
|
|
44
46
|
fb = Factbase::Looged.new(fb, @loog)
|
|
@@ -36,16 +36,24 @@ class Judges::Print
|
|
|
36
36
|
|
|
37
37
|
def run(opts, args)
|
|
38
38
|
raise 'At lease one argument required' if args.empty?
|
|
39
|
-
o = args[1]
|
|
40
39
|
f = args[0]
|
|
41
40
|
fb = Judges::Impex.new(@loog, f).import
|
|
42
41
|
fb.query("(not #{opts['query']})").delete! unless opts['query'].nil?
|
|
42
|
+
o = args[1]
|
|
43
43
|
if o.nil?
|
|
44
44
|
raise 'Either provide output file name or use --auto' unless opts[:auto]
|
|
45
45
|
o = File.join(File.dirname(f), File.basename(f).gsub(/\.[^.]*$/, ''))
|
|
46
46
|
o = "#{o}.#{opts[:format]}"
|
|
47
47
|
end
|
|
48
48
|
FileUtils.mkdir_p(File.dirname(o))
|
|
49
|
+
if !opts['force'] && File.exist?(o)
|
|
50
|
+
if File.mtime(f) < File.mtime(o)
|
|
51
|
+
@loog.info("No need to print to #{o.to_rel}, since it's up to date (#{File.size(o)} bytes)")
|
|
52
|
+
return
|
|
53
|
+
end
|
|
54
|
+
@loog.debug("The factbase #{f.to_rel} is younger than the target #{o.to_rel}, need to print")
|
|
55
|
+
end
|
|
56
|
+
start = Time.now
|
|
49
57
|
output =
|
|
50
58
|
case opts[:format].downcase
|
|
51
59
|
when 'yaml'
|
|
@@ -59,6 +67,6 @@ class Judges::Print
|
|
|
59
67
|
Factbase::ToXML.new(fb).xml
|
|
60
68
|
end
|
|
61
69
|
File.binwrite(o, output)
|
|
62
|
-
@loog.info("Factbase printed to #{o.to_rel} (#{File.size(o)} bytes)")
|
|
70
|
+
@loog.info("Factbase printed to #{o.to_rel} (#{File.size(o)} bytes) in #{format('%.02f', Time.now - start)}s")
|
|
63
71
|
end
|
|
64
72
|
end
|
data/test/commands/test_print.rb
CHANGED
|
@@ -44,4 +44,19 @@ class TestPrint < Minitest::Test
|
|
|
44
44
|
assert_equal(1, YAML.load_file(y)['facts'].size)
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
|
+
|
|
48
|
+
def test_print_twice
|
|
49
|
+
Dir.mktmpdir do |d|
|
|
50
|
+
f = File.join(d, 'base.fb')
|
|
51
|
+
fb = Factbase.new
|
|
52
|
+
fb.insert
|
|
53
|
+
File.binwrite(f, fb.export)
|
|
54
|
+
Judges::Print.new(Loog::NULL).run({ format: 'yaml', auto: true }, [f])
|
|
55
|
+
y = File.join(d, 'base.yaml')
|
|
56
|
+
assert(File.exist?(y))
|
|
57
|
+
mtime = File.mtime(y)
|
|
58
|
+
Judges::Print.new(Loog::NULL).run({ format: 'yaml', auto: true }, [f])
|
|
59
|
+
assert_equal(mtime, File.mtime(y))
|
|
60
|
+
end
|
|
61
|
+
end
|
|
47
62
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: judges
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.30
|
|
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-05-
|
|
11
|
+
date: 2024-05-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: backtrace
|
|
@@ -30,14 +30,14 @@ dependencies:
|
|
|
30
30
|
requirements:
|
|
31
31
|
- - "~>"
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 0.0.
|
|
33
|
+
version: 0.0.29
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 0.0.
|
|
40
|
+
version: 0.0.29
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: gli
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -113,6 +113,7 @@ files:
|
|
|
113
113
|
- Rakefile
|
|
114
114
|
- bin/judges
|
|
115
115
|
- features/gem_package.feature
|
|
116
|
+
- features/import.feature
|
|
116
117
|
- features/inspect.feature
|
|
117
118
|
- features/join.feature
|
|
118
119
|
- features/misc.feature
|