schemurai 3.0.1 → 3.1.0
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/README.md +28 -7
- data/ext/schemurai_native/Cargo.lock +59 -1
- data/ext/schemurai_native/Cargo.toml +4 -1
- data/ext/schemurai_native/extconf.rb +5 -1
- data/ext/schemurai_native/glue.c +1679 -62
- data/ext/schemurai_native/protocol.def +45 -0
- data/ext/schemurai_native/src/budget.rs +49 -0
- data/ext/schemurai_native/src/container.rs +460 -0
- data/ext/schemurai_native/src/content.rs +56 -27
- data/ext/schemurai_native/src/diagnostics/array.rs +392 -0
- data/ext/schemurai_native/src/diagnostics/object.rs +218 -0
- data/ext/schemurai_native/src/diagnostics.rs +1064 -325
- data/ext/schemurai_native/src/enumeration.rs +6 -1
- data/ext/schemurai_native/src/evaluation.rs +49 -20
- data/ext/schemurai_native/src/format.rs +8 -6
- data/ext/schemurai_native/src/graph.rs +37 -0
- data/ext/schemurai_native/src/instance_graph.rs +90 -0
- data/ext/schemurai_native/src/lib.rs +910 -237
- data/ext/schemurai_native/src/memo.rs +11 -38
- data/ext/schemurai_native/src/number/arbitrary.rs +210 -0
- data/ext/schemurai_native/src/number.rs +250 -59
- data/ext/schemurai_native/src/pattern.rs +113 -101
- data/ext/schemurai_native/src/pointer.rs +97 -0
- data/ext/schemurai_native/src/runtime/properties.rs +162 -0
- data/ext/schemurai_native/src/runtime/reports.rs +266 -0
- data/ext/schemurai_native/src/runtime/scopes.rs +430 -0
- data/ext/schemurai_native/src/runtime.rs +1020 -0
- data/ext/schemurai_native/src/scope.rs +60 -16
- data/ext/schemurai_native/src/string.rs +68 -0
- data/ext/schemurai_native/src/tracking.rs +244 -174
- data/lib/schemurai/container_checks/array_diagnostics.rb +119 -0
- data/lib/schemurai/container_checks/object_diagnostics.rb +152 -0
- data/lib/schemurai/container_checks.rb +534 -0
- data/lib/schemurai/decimal.rb +11 -0
- data/lib/schemurai/dialect.rb +0 -12
- data/lib/schemurai/ecma_regexp.rb +46 -0
- data/lib/schemurai/evaluation_limits.rb +65 -0
- data/lib/schemurai/evaluation_pool.rb +66 -0
- data/lib/schemurai/evaluator.rb +9 -48
- data/lib/schemurai/json_pointer.rb +11 -0
- data/lib/schemurai/limited_evaluator.rb +2 -59
- data/lib/schemurai/native/diagnostics.rb +4 -3
- data/lib/schemurai/native/evaluator.rb +38 -10
- data/lib/schemurai/native/null_numeric.rb +23 -0
- data/lib/schemurai/number_checks.rb +128 -0
- data/lib/schemurai/string_checks.rb +166 -0
- data/lib/schemurai/type_checks.rb +59 -0
- data/lib/schemurai/value_equality.rb +72 -0
- data/lib/schemurai/version.rb +1 -1
- data/lib/schemurai/vm/compiler.rb +18 -26
- data/lib/schemurai/vm/evaluator.rb +87 -545
- data/lib/schemurai/vm/limited_evaluator.rb +8 -78
- metadata +25 -2
|
@@ -1,96 +1,26 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
3
|
require_relative "../limit_exceeded"
|
|
4
|
-
require_relative "../
|
|
4
|
+
require_relative "../evaluation_limits"
|
|
5
5
|
require_relative "evaluator"
|
|
6
6
|
|
|
7
7
|
module Schemurai
|
|
8
8
|
module VM
|
|
9
9
|
# VM execution with invocation-local limits; no Ruby evaluator delegation.
|
|
10
10
|
class LimitedEvaluator < Evaluator
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
@budget.check_deadline!
|
|
15
|
-
result
|
|
16
|
-
ensure
|
|
17
|
-
@budget = nil
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
def valid?(instance, max_errors: nil, timeout: nil, budget: nil)
|
|
21
|
-
@budget = budget || Internal::LimitBudget.new(max_errors: max_errors, timeout: timeout)
|
|
22
|
-
result = super(instance)
|
|
23
|
-
@budget.check_deadline!
|
|
24
|
-
result
|
|
25
|
-
ensure
|
|
26
|
-
@budget = nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
private def evaluate(node, instance)
|
|
30
|
-
@budget.checkpoint
|
|
31
|
-
super
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
private def evaluate_valid(node, instance)
|
|
35
|
-
@budget.checkpoint
|
|
36
|
-
super
|
|
37
|
-
end
|
|
11
|
+
include Internal::ValueEquality::Checkpoints
|
|
12
|
+
include Internal::StringChecks::TimedRegexps
|
|
13
|
+
include Internal::EvaluationLimits
|
|
38
14
|
|
|
39
15
|
private def add_error(keyword, message = nil, append_keyword: true, &block)
|
|
40
16
|
@budget.reserve_error if @errors
|
|
41
17
|
super
|
|
42
18
|
end
|
|
43
19
|
|
|
44
|
-
private def
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
result
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
private def check_string(node, value)
|
|
52
|
-
@budget.check_deadline!
|
|
53
|
-
result = super
|
|
54
|
-
@budget.check_deadline!
|
|
55
|
-
result
|
|
56
|
-
end
|
|
57
|
-
|
|
58
|
-
private def decimal(value)
|
|
59
|
-
@budget.check_deadline!
|
|
60
|
-
result = super
|
|
61
|
-
@budget.check_deadline!
|
|
62
|
-
result
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
private def ecma_regexp(pattern)
|
|
66
|
-
@budget.check_deadline!
|
|
67
|
-
result = super
|
|
68
|
-
@budget.check_deadline!
|
|
69
|
-
result
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
private def valid_content?(schema, value)
|
|
73
|
-
@budget.check_deadline!
|
|
74
|
-
result = super
|
|
75
|
-
@budget.check_deadline!
|
|
76
|
-
result
|
|
77
|
-
end
|
|
78
|
-
|
|
79
|
-
private def check_content(schema, value)
|
|
80
|
-
@budget.check_deadline!
|
|
81
|
-
result = super
|
|
82
|
-
@budget.check_deadline!
|
|
83
|
-
result
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
private def json_equal?(left, right)
|
|
87
|
-
@budget.checkpoint
|
|
88
|
-
super
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private def json_fingerprint(value)
|
|
92
|
-
@budget.checkpoint
|
|
93
|
-
super
|
|
20
|
+
private def number_state
|
|
21
|
+
state = super
|
|
22
|
+
state.budget = @budget
|
|
23
|
+
state
|
|
94
24
|
end
|
|
95
25
|
end
|
|
96
26
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: schemurai
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.0
|
|
4
|
+
version: 3.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Kuya KOHARA (oakcask)
|
|
@@ -44,8 +44,11 @@ files:
|
|
|
44
44
|
- ext/schemurai_native/protocol.def
|
|
45
45
|
- ext/schemurai_native/protocol.h
|
|
46
46
|
- ext/schemurai_native/src/budget.rs
|
|
47
|
+
- ext/schemurai_native/src/container.rs
|
|
47
48
|
- ext/schemurai_native/src/content.rs
|
|
48
49
|
- ext/schemurai_native/src/diagnostics.rs
|
|
50
|
+
- ext/schemurai_native/src/diagnostics/array.rs
|
|
51
|
+
- ext/schemurai_native/src/diagnostics/object.rs
|
|
49
52
|
- ext/schemurai_native/src/enumeration.rs
|
|
50
53
|
- ext/schemurai_native/src/evaluation.rs
|
|
51
54
|
- ext/schemurai_native/src/format.rs
|
|
@@ -56,21 +59,36 @@ files:
|
|
|
56
59
|
- ext/schemurai_native/src/memo.rs
|
|
57
60
|
- ext/schemurai_native/src/memo_scope.rs
|
|
58
61
|
- ext/schemurai_native/src/number.rs
|
|
62
|
+
- ext/schemurai_native/src/number/arbitrary.rs
|
|
59
63
|
- ext/schemurai_native/src/pattern.rs
|
|
64
|
+
- ext/schemurai_native/src/pointer.rs
|
|
65
|
+
- ext/schemurai_native/src/runtime.rs
|
|
66
|
+
- ext/schemurai_native/src/runtime/properties.rs
|
|
67
|
+
- ext/schemurai_native/src/runtime/reports.rs
|
|
68
|
+
- ext/schemurai_native/src/runtime/scopes.rs
|
|
60
69
|
- ext/schemurai_native/src/scope.rs
|
|
70
|
+
- ext/schemurai_native/src/string.rs
|
|
61
71
|
- ext/schemurai_native/src/structural.rs
|
|
62
72
|
- ext/schemurai_native/src/tracking.rs
|
|
63
73
|
- lib/schemurai.rb
|
|
64
74
|
- lib/schemurai/backend.rb
|
|
75
|
+
- lib/schemurai/container_checks.rb
|
|
76
|
+
- lib/schemurai/container_checks/array_diagnostics.rb
|
|
77
|
+
- lib/schemurai/container_checks/object_diagnostics.rb
|
|
78
|
+
- lib/schemurai/decimal.rb
|
|
65
79
|
- lib/schemurai/dialect.rb
|
|
66
80
|
- lib/schemurai/dialect_keywords.rb
|
|
67
81
|
- lib/schemurai/dialects/draft2019_09.rb
|
|
68
82
|
- lib/schemurai/dialects/draft2020_12.rb
|
|
69
83
|
- lib/schemurai/dialects/draft7.rb
|
|
84
|
+
- lib/schemurai/ecma_regexp.rb
|
|
70
85
|
- lib/schemurai/error_message.rb
|
|
71
86
|
- lib/schemurai/evaluation.rb
|
|
87
|
+
- lib/schemurai/evaluation_limits.rb
|
|
88
|
+
- lib/schemurai/evaluation_pool.rb
|
|
72
89
|
- lib/schemurai/evaluator.rb
|
|
73
90
|
- lib/schemurai/formats.rb
|
|
91
|
+
- lib/schemurai/json_pointer.rb
|
|
74
92
|
- lib/schemurai/limit_budget.rb
|
|
75
93
|
- lib/schemurai/limit_exceeded.rb
|
|
76
94
|
- lib/schemurai/limited_evaluator.rb
|
|
@@ -80,10 +98,15 @@ files:
|
|
|
80
98
|
- lib/schemurai/meta_schemas/draft7.rb
|
|
81
99
|
- lib/schemurai/native/diagnostics.rb
|
|
82
100
|
- lib/schemurai/native/evaluator.rb
|
|
101
|
+
- lib/schemurai/native/null_numeric.rb
|
|
102
|
+
- lib/schemurai/number_checks.rb
|
|
83
103
|
- lib/schemurai/schema_domain.rb
|
|
84
104
|
- lib/schemurai/schema_graph.rb
|
|
85
105
|
- lib/schemurai/schema_node.rb
|
|
106
|
+
- lib/schemurai/string_checks.rb
|
|
107
|
+
- lib/schemurai/type_checks.rb
|
|
86
108
|
- lib/schemurai/unique_items.rb
|
|
109
|
+
- lib/schemurai/value_equality.rb
|
|
87
110
|
- lib/schemurai/version.rb
|
|
88
111
|
- lib/schemurai/vm/compiler.rb
|
|
89
112
|
- lib/schemurai/vm/evaluator.rb
|
|
@@ -95,7 +118,7 @@ licenses:
|
|
|
95
118
|
metadata:
|
|
96
119
|
homepage_uri: https://github.com/oakcask/schemurai
|
|
97
120
|
source_code_uri: https://github.com/oakcask/schemurai/tree/main
|
|
98
|
-
documentation_uri: https://rubydoc.info/gems/schemurai/3.0
|
|
121
|
+
documentation_uri: https://rubydoc.info/gems/schemurai/3.1.0
|
|
99
122
|
rubygems_mfa_required: 'true'
|
|
100
123
|
rdoc_options:
|
|
101
124
|
- "--main"
|