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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +28 -7
  3. data/ext/schemurai_native/Cargo.lock +59 -1
  4. data/ext/schemurai_native/Cargo.toml +4 -1
  5. data/ext/schemurai_native/extconf.rb +5 -1
  6. data/ext/schemurai_native/glue.c +1679 -62
  7. data/ext/schemurai_native/protocol.def +45 -0
  8. data/ext/schemurai_native/src/budget.rs +49 -0
  9. data/ext/schemurai_native/src/container.rs +460 -0
  10. data/ext/schemurai_native/src/content.rs +56 -27
  11. data/ext/schemurai_native/src/diagnostics/array.rs +392 -0
  12. data/ext/schemurai_native/src/diagnostics/object.rs +218 -0
  13. data/ext/schemurai_native/src/diagnostics.rs +1064 -325
  14. data/ext/schemurai_native/src/enumeration.rs +6 -1
  15. data/ext/schemurai_native/src/evaluation.rs +49 -20
  16. data/ext/schemurai_native/src/format.rs +8 -6
  17. data/ext/schemurai_native/src/graph.rs +37 -0
  18. data/ext/schemurai_native/src/instance_graph.rs +90 -0
  19. data/ext/schemurai_native/src/lib.rs +910 -237
  20. data/ext/schemurai_native/src/memo.rs +11 -38
  21. data/ext/schemurai_native/src/number/arbitrary.rs +210 -0
  22. data/ext/schemurai_native/src/number.rs +250 -59
  23. data/ext/schemurai_native/src/pattern.rs +113 -101
  24. data/ext/schemurai_native/src/pointer.rs +97 -0
  25. data/ext/schemurai_native/src/runtime/properties.rs +162 -0
  26. data/ext/schemurai_native/src/runtime/reports.rs +266 -0
  27. data/ext/schemurai_native/src/runtime/scopes.rs +430 -0
  28. data/ext/schemurai_native/src/runtime.rs +1020 -0
  29. data/ext/schemurai_native/src/scope.rs +60 -16
  30. data/ext/schemurai_native/src/string.rs +68 -0
  31. data/ext/schemurai_native/src/tracking.rs +244 -174
  32. data/lib/schemurai/container_checks/array_diagnostics.rb +119 -0
  33. data/lib/schemurai/container_checks/object_diagnostics.rb +152 -0
  34. data/lib/schemurai/container_checks.rb +534 -0
  35. data/lib/schemurai/decimal.rb +11 -0
  36. data/lib/schemurai/dialect.rb +0 -12
  37. data/lib/schemurai/ecma_regexp.rb +46 -0
  38. data/lib/schemurai/evaluation_limits.rb +65 -0
  39. data/lib/schemurai/evaluation_pool.rb +66 -0
  40. data/lib/schemurai/evaluator.rb +9 -48
  41. data/lib/schemurai/json_pointer.rb +11 -0
  42. data/lib/schemurai/limited_evaluator.rb +2 -59
  43. data/lib/schemurai/native/diagnostics.rb +4 -3
  44. data/lib/schemurai/native/evaluator.rb +38 -10
  45. data/lib/schemurai/native/null_numeric.rb +23 -0
  46. data/lib/schemurai/number_checks.rb +128 -0
  47. data/lib/schemurai/string_checks.rb +166 -0
  48. data/lib/schemurai/type_checks.rb +59 -0
  49. data/lib/schemurai/value_equality.rb +72 -0
  50. data/lib/schemurai/version.rb +1 -1
  51. data/lib/schemurai/vm/compiler.rb +18 -26
  52. data/lib/schemurai/vm/evaluator.rb +87 -545
  53. data/lib/schemurai/vm/limited_evaluator.rb +8 -78
  54. metadata +25 -2
@@ -1,96 +1,26 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative "../limit_exceeded"
4
- require_relative "../limit_budget"
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
- def validate(instance, max_errors: nil, timeout: nil, budget: nil)
12
- @budget = budget || Internal::LimitBudget.new(max_errors: max_errors, timeout: timeout)
13
- result = super(instance)
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 valid_string?(node, value)
45
- @budget.check_deadline!
46
- result = super
47
- @budget.check_deadline!
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.1
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.1
121
+ documentation_uri: https://rubydoc.info/gems/schemurai/3.1.0
99
122
  rubygems_mfa_required: 'true'
100
123
  rdoc_options:
101
124
  - "--main"