rj_schema 0.2.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rj_schema/rapidjson/bin/unittestschema/address.json +139 -0
  3. data/ext/rj_schema/rapidjson/bin/unittestschema/allOf_address.json +7 -0
  4. data/ext/rj_schema/rapidjson/bin/unittestschema/anyOf_address.json +7 -0
  5. data/ext/rj_schema/rapidjson/bin/unittestschema/oneOf_address.json +7 -0
  6. data/ext/rj_schema/rapidjson/example/schemavalidator/schemavalidator.cpp +118 -0
  7. data/ext/rj_schema/rapidjson/include/rapidjson/allocators.h +5 -5
  8. data/ext/rj_schema/rapidjson/include/rapidjson/cursorstreamwrapper.h +1 -1
  9. data/ext/rj_schema/rapidjson/include/rapidjson/document.h +17 -12
  10. data/ext/rj_schema/rapidjson/include/rapidjson/encodedstream.h +1 -1
  11. data/ext/rj_schema/rapidjson/include/rapidjson/encodings.h +1 -1
  12. data/ext/rj_schema/rapidjson/include/rapidjson/error/en.h +49 -1
  13. data/ext/rj_schema/rapidjson/include/rapidjson/error/error.h +56 -1
  14. data/ext/rj_schema/rapidjson/include/rapidjson/filereadstream.h +1 -1
  15. data/ext/rj_schema/rapidjson/include/rapidjson/filewritestream.h +1 -1
  16. data/ext/rj_schema/rapidjson/include/rapidjson/fwd.h +1 -1
  17. data/ext/rj_schema/rapidjson/include/rapidjson/internal/biginteger.h +1 -1
  18. data/ext/rj_schema/rapidjson/include/rapidjson/internal/clzll.h +4 -4
  19. data/ext/rj_schema/rapidjson/include/rapidjson/internal/diyfp.h +1 -1
  20. data/ext/rj_schema/rapidjson/include/rapidjson/internal/dtoa.h +1 -1
  21. data/ext/rj_schema/rapidjson/include/rapidjson/internal/ieee754.h +1 -1
  22. data/ext/rj_schema/rapidjson/include/rapidjson/internal/itoa.h +1 -1
  23. data/ext/rj_schema/rapidjson/include/rapidjson/internal/meta.h +1 -1
  24. data/ext/rj_schema/rapidjson/include/rapidjson/internal/pow10.h +1 -1
  25. data/ext/rj_schema/rapidjson/include/rapidjson/internal/regex.h +1 -1
  26. data/ext/rj_schema/rapidjson/include/rapidjson/internal/stack.h +1 -1
  27. data/ext/rj_schema/rapidjson/include/rapidjson/internal/strfunc.h +1 -1
  28. data/ext/rj_schema/rapidjson/include/rapidjson/internal/strtod.h +1 -1
  29. data/ext/rj_schema/rapidjson/include/rapidjson/internal/swap.h +1 -1
  30. data/ext/rj_schema/rapidjson/include/rapidjson/istreamwrapper.h +1 -1
  31. data/ext/rj_schema/rapidjson/include/rapidjson/memorybuffer.h +1 -1
  32. data/ext/rj_schema/rapidjson/include/rapidjson/memorystream.h +1 -1
  33. data/ext/rj_schema/rapidjson/include/rapidjson/ostreamwrapper.h +1 -1
  34. data/ext/rj_schema/rapidjson/include/rapidjson/pointer.h +1 -1
  35. data/ext/rj_schema/rapidjson/include/rapidjson/prettywriter.h +1 -1
  36. data/ext/rj_schema/rapidjson/include/rapidjson/rapidjson.h +17 -1
  37. data/ext/rj_schema/rapidjson/include/rapidjson/reader.h +17 -9
  38. data/ext/rj_schema/rapidjson/include/rapidjson/schema.h +311 -159
  39. data/ext/rj_schema/rapidjson/include/rapidjson/stream.h +1 -1
  40. data/ext/rj_schema/rapidjson/include/rapidjson/stringbuffer.h +1 -1
  41. data/ext/rj_schema/rapidjson/include/rapidjson/writer.h +3 -3
  42. data/ext/rj_schema/rapidjson/readme.md +3 -3
  43. data/ext/rj_schema/rapidjson/readme.zh-cn.md +2 -2
  44. data/ext/rj_schema/rapidjson/test/perftest/misctest.cpp +1 -1
  45. data/ext/rj_schema/rapidjson/test/perftest/perftest.cpp +1 -1
  46. data/ext/rj_schema/rapidjson/test/perftest/perftest.h +1 -1
  47. data/ext/rj_schema/rapidjson/test/perftest/platformtest.cpp +1 -1
  48. data/ext/rj_schema/rapidjson/test/perftest/rapidjsontest.cpp +1 -1
  49. data/ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt +1 -0
  50. data/ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp +1 -1
  51. data/ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp +1 -1
  52. data/ext/rj_schema/rapidjson/test/unittest/clzlltest.cpp +34 -0
  53. data/ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp +1 -1
  54. data/ext/rj_schema/rapidjson/test/unittest/documenttest.cpp +1 -1
  55. data/ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp +1 -1
  56. data/ext/rj_schema/rapidjson/test/unittest/encodedstreamtest.cpp +1 -1
  57. data/ext/rj_schema/rapidjson/test/unittest/encodingstest.cpp +1 -1
  58. data/ext/rj_schema/rapidjson/test/unittest/filestreamtest.cpp +1 -1
  59. data/ext/rj_schema/rapidjson/test/unittest/fwdtest.cpp +1 -1
  60. data/ext/rj_schema/rapidjson/test/unittest/istreamwrappertest.cpp +1 -1
  61. data/ext/rj_schema/rapidjson/test/unittest/itoatest.cpp +1 -1
  62. data/ext/rj_schema/rapidjson/test/unittest/jsoncheckertest.cpp +1 -1
  63. data/ext/rj_schema/rapidjson/test/unittest/namespacetest.cpp +1 -1
  64. data/ext/rj_schema/rapidjson/test/unittest/ostreamwrappertest.cpp +1 -1
  65. data/ext/rj_schema/rapidjson/test/unittest/pointertest.cpp +33 -1
  66. data/ext/rj_schema/rapidjson/test/unittest/prettywritertest.cpp +1 -1
  67. data/ext/rj_schema/rapidjson/test/unittest/readertest.cpp +4 -1
  68. data/ext/rj_schema/rapidjson/test/unittest/regextest.cpp +1 -1
  69. data/ext/rj_schema/rapidjson/test/unittest/schematest.cpp +593 -78
  70. data/ext/rj_schema/rapidjson/test/unittest/simdtest.cpp +1 -1
  71. data/ext/rj_schema/rapidjson/test/unittest/strfunctest.cpp +1 -1
  72. data/ext/rj_schema/rapidjson/test/unittest/stringbuffertest.cpp +1 -1
  73. data/ext/rj_schema/rapidjson/test/unittest/strtodtest.cpp +1 -1
  74. data/ext/rj_schema/rapidjson/test/unittest/unittest.cpp +1 -1
  75. data/ext/rj_schema/rapidjson/test/unittest/unittest.h +1 -1
  76. data/ext/rj_schema/rapidjson/test/unittest/valuetest.cpp +1 -1
  77. data/ext/rj_schema/rapidjson/test/unittest/writertest.cpp +1 -1
  78. data/ext/rj_schema/rj_schema.cpp +160 -16
  79. data/lib/rj_schema.rb +1 -1
  80. metadata +8 -3
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -1,6 +1,6 @@
1
1
  // Tencent is pleased to support the open source community by making RapidJSON available.
2
2
  //
3
- // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip. All rights reserved.
3
+ // Copyright (C) 2015 THL A29 Limited, a Tencent company, and Milo Yip.
4
4
  //
5
5
  // Licensed under the MIT License (the "License"); you may not use this file except
6
6
  // in compliance with the License. You may obtain a copy of the License at
@@ -9,6 +9,7 @@
9
9
  #endif
10
10
 
11
11
  #include <unordered_map>
12
+ #include <sstream>
12
13
  #include <ruby.h>
13
14
  #include <ruby/version.h>
14
15
 
@@ -25,8 +26,11 @@ namespace std {
25
26
 
26
27
  #include <rapidjson/schema.h>
27
28
  #include <rapidjson/filereadstream.h>
28
- #include <rapidjson/prettywriter.h>
29
+ #include <rapidjson/writer.h>
30
+ #include <rapidjson/error/error.h>
31
+ #include <rapidjson/error/en.h>
29
32
 
33
+ typedef rapidjson::GenericValue<rapidjson::UTF8<>, rapidjson::CrtAllocator> ErrorType;
30
34
  typedef std::unordered_map<std::string, VALUE> SchemaInput;
31
35
  typedef std::unordered_map<ID, rapidjson::SchemaDocument> SchemaCollection;
32
36
  struct SchemaManager;
@@ -93,25 +97,149 @@ const rapidjson::SchemaDocument* SchemaManager::provide(const char* uri, rapidjs
93
97
  throw std::invalid_argument(std::string("$ref remote schema not provided: ") + uri);
94
98
  }
95
99
 
96
- VALUE perform_validation(VALUE self, VALUE schema_arg, VALUE document_arg, bool with_errors) {
100
+ static void CreateHumanErrorMessages(std::ostringstream& ss, const ErrorType& errors, size_t depth = 0, const char* context = 0) {
101
+ auto get_string = [](const ErrorType& val) -> std::string {
102
+ if (val.IsString())
103
+ return val.GetString();
104
+ else if (val.IsDouble())
105
+ return std::to_string(val.GetDouble());
106
+ else if (val.IsUint())
107
+ return std::to_string(val.GetUint());
108
+ else if (val.IsInt())
109
+ return std::to_string(val.GetInt());
110
+ else if (val.IsUint64())
111
+ return std::to_string(val.GetUint64());
112
+ else if (val.IsInt64())
113
+ return std::to_string(val.GetInt64());
114
+ else if (val.IsBool() && val.GetBool())
115
+ return "true";
116
+ else if (val.IsBool())
117
+ return "false";
118
+ else if (val.IsFloat())
119
+ return std::to_string(val.GetFloat());
120
+ return "";
121
+ };
122
+
123
+ auto handle_error = [&ss, &get_string](const char* errorName, const ErrorType& error, size_t depth, const char* context) {
124
+ if (!error.ObjectEmpty()) {
125
+ int code = error["errorCode"].GetInt();
126
+ std::string message(GetValidateError_En(static_cast<rapidjson::ValidateErrorCode>(code)));
127
+
128
+ for (const auto& member : error.GetObject()) {
129
+ std::string insertName("%");
130
+ insertName += member.name.GetString();
131
+ std::size_t insertPos = message.find(insertName);
132
+
133
+ if (insertPos != std::string::npos) {
134
+ std::string insertString("");
135
+ const ErrorType& insert = member.value;
136
+
137
+ if (insert.IsArray()) {
138
+ for (ErrorType::ConstValueIterator itemsItr = insert.Begin(); itemsItr != insert.End(); ++itemsItr) {
139
+ if (itemsItr != insert.Begin())
140
+ insertString += ",";
141
+
142
+ insertString += get_string(*itemsItr);
143
+ }
144
+ }
145
+ else {
146
+ insertString += get_string(insert);
147
+ }
148
+
149
+ message.replace(insertPos, insertName.length(), insertString);
150
+ }
151
+ }
152
+
153
+ std::string indent(depth * 2, ' ');
154
+ ss << indent << "Error Name: " << errorName << std::endl;
155
+ ss << indent << "Message: " << message << std::endl;
156
+ ss << indent << "Instance: " << error["instanceRef"].GetString() << std::endl;
157
+ ss << indent << "Schema: " << error["schemaRef"].GetString() << std::endl;
158
+ if (depth > 0)
159
+ ss << indent << "Context: " << context << std::endl;
160
+ ss << std::endl;
161
+
162
+ if (error.HasMember("errors")) {
163
+ depth++;
164
+ const ErrorType& childErrors = error["errors"];
165
+
166
+ if (childErrors.IsArray()) {
167
+ for (const auto& item : childErrors.GetArray()) {
168
+ CreateHumanErrorMessages(ss, item, depth, errorName);
169
+ }
170
+ }
171
+ else if (childErrors.IsObject()) {
172
+ for (const auto& member : childErrors.GetObject()) {
173
+ CreateHumanErrorMessages(ss, member.value, depth, errorName);
174
+ }
175
+ }
176
+ }
177
+ }
178
+ };
179
+
180
+ for (const auto& member : errors.GetObject()) {
181
+ const char* errorName = member.name.GetString();
182
+ const ErrorType& errorContent = member.value;
183
+
184
+ if (errorContent.IsArray()) {
185
+ for (const auto& item : errorContent.GetArray()) {
186
+ handle_error(errorName, item, depth, context);
187
+ }
188
+ }
189
+ else if (errorContent.IsObject()) {
190
+ handle_error(errorName, errorContent, depth, context);
191
+ }
192
+ }
193
+ }
194
+
195
+ VALUE perform_validation(VALUE self, VALUE schema_arg, VALUE document_arg, VALUE continue_on_error, VALUE machine_errors, VALUE human_errors) {
196
+ if (continue_on_error == Qnil)
197
+ continue_on_error = Qfalse;
198
+ if (machine_errors == Qnil)
199
+ machine_errors = Qtrue;
200
+ if (human_errors == Qnil)
201
+ human_errors = Qfalse;
202
+
97
203
  try {
98
204
  SchemaManager* schema_manager;
99
205
  Data_Get_Struct(self, SchemaManager, schema_manager);
206
+
100
207
  auto document = parse_document(document_arg);
101
- auto validate = [with_errors, &document](const rapidjson::SchemaDocument& schema) -> VALUE {
208
+ auto validate = [&continue_on_error, &machine_errors, &human_errors, &document](const rapidjson::SchemaDocument& schema) -> VALUE {
102
209
  rapidjson::SchemaValidator validator(schema);
103
- if (document.Accept(validator)) {
104
- return with_errors ? rb_ary_new() : Qtrue;
105
- }
106
- else {
107
- if (!with_errors)
108
- return Qfalse;
210
+
211
+ if (continue_on_error == Qtrue)
212
+ validator.SetValidateFlags(rapidjson::RAPIDJSON_VALIDATE_DEFAULT_FLAGS | rapidjson::kValidateContinueOnErrorFlag);
213
+
214
+ document.Accept(validator);
215
+
216
+ if (machine_errors == Qfalse && human_errors == Qfalse)
217
+ return validator.IsValid() ? Qtrue : Qfalse;
218
+
219
+ VALUE result = rb_hash_new();
220
+
221
+ if (machine_errors == Qtrue) {
109
222
  rapidjson::StringBuffer buffer;
110
- rapidjson::PrettyWriter<rapidjson::StringBuffer> writer(buffer);
223
+ rapidjson::Writer<rapidjson::StringBuffer> writer(buffer);
111
224
  validator.GetError().Accept(writer);
112
- VALUE errors = rb_funcall(rb_const_get(rb_cObject, rb_intern("JSON")), rb_intern("parse"), 1, rb_str_new_cstr(buffer.GetString()));
113
- return RB_TYPE_P(errors, T_HASH) ? rb_ary_new4(1, &errors) : errors;
225
+ rb_hash_aset(
226
+ result,
227
+ ID2SYM(rb_intern("machine_errors")),
228
+ rb_funcall(rb_const_get(rb_cObject, rb_intern("JSON")), rb_intern("parse"), 1, rb_str_new_cstr(buffer.GetString()))
229
+ );
230
+ }
231
+
232
+ if (human_errors == Qtrue) {
233
+ std::ostringstream ss;
234
+ CreateHumanErrorMessages(ss, validator.GetError());
235
+ rb_hash_aset(
236
+ result,
237
+ ID2SYM(rb_intern("human_errors")),
238
+ rb_str_new_cstr(ss.str().c_str())
239
+ );
114
240
  }
241
+
242
+ return result;
115
243
  };
116
244
 
117
245
  if (SYMBOL_P(schema_arg)) {
@@ -135,12 +263,28 @@ VALUE perform_validation(VALUE self, VALUE schema_arg, VALUE document_arg, bool
135
263
  }
136
264
  }
137
265
 
138
- extern "C" VALUE validator_validate(VALUE self, VALUE schema_arg, VALUE document_arg) {
139
- return perform_validation(self, schema_arg, document_arg, true);
266
+ extern "C" VALUE validator_validate(int argc, VALUE* argv, VALUE self) {
267
+ VALUE schema_arg, document_arg, opts;
268
+
269
+ rb_scan_args(argc, argv, "2:", &schema_arg, &document_arg, &opts);
270
+
271
+ if (NIL_P(opts))
272
+ opts = rb_hash_new();
273
+
274
+ VALUE result = perform_validation(
275
+ self,
276
+ schema_arg,
277
+ document_arg,
278
+ rb_hash_aref(opts, ID2SYM(rb_intern("continue_on_error"))),
279
+ rb_hash_aref(opts, ID2SYM(rb_intern("machine_errors"))),
280
+ rb_hash_aref(opts, ID2SYM(rb_intern("human_errors")))
281
+ );
282
+
283
+ return (result == Qtrue || result == Qfalse) ? rb_hash_new() : result;
140
284
  }
141
285
 
142
286
  extern "C" VALUE validator_valid(VALUE self, VALUE schema_arg, VALUE document_arg) {
143
- return perform_validation(self, schema_arg, document_arg, false);
287
+ return perform_validation(self, schema_arg, document_arg, Qfalse, Qfalse, Qfalse);
144
288
  }
145
289
 
146
290
  extern "C" void validator_free(SchemaManager* schema_manager) {
@@ -191,6 +335,6 @@ extern "C" void Init_rj_schema(void) {
191
335
 
192
336
  rb_define_alloc_func(cValidator, validator_alloc);
193
337
  rb_define_method(cValidator, "initialize", reinterpret_cast<VALUE(*)(...)>(validator_initialize), -1);
194
- rb_define_method(cValidator, "validate", reinterpret_cast<VALUE(*)(...)>(validator_validate), 2);
338
+ rb_define_method(cValidator, "validate", reinterpret_cast<VALUE(*)(...)>(validator_validate), -1);
195
339
  rb_define_method(cValidator, "valid?", reinterpret_cast<VALUE(*)(...)>(validator_valid), 2);
196
340
  }
data/lib/rj_schema.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require 'json'
2
2
 
3
3
  class RjSchema
4
- VERSION = '0.2.6'
4
+ VERSION = '1.0.0'
5
5
  end
6
6
 
7
7
  require 'rj_schema/rj_schema'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rj_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christian Semmler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-18 00:00:00.000000000 Z
11
+ date: 2021-02-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -239,6 +239,10 @@ files:
239
239
  - ext/rj_schema/rapidjson/bin/types/nulls.json
240
240
  - ext/rj_schema/rapidjson/bin/types/paragraphs.json
241
241
  - ext/rj_schema/rapidjson/bin/types/readme.txt
242
+ - ext/rj_schema/rapidjson/bin/unittestschema/address.json
243
+ - ext/rj_schema/rapidjson/bin/unittestschema/allOf_address.json
244
+ - ext/rj_schema/rapidjson/bin/unittestschema/anyOf_address.json
245
+ - ext/rj_schema/rapidjson/bin/unittestschema/oneOf_address.json
242
246
  - ext/rj_schema/rapidjson/contrib/natvis/LICENSE
243
247
  - ext/rj_schema/rapidjson/contrib/natvis/README.md
244
248
  - ext/rj_schema/rapidjson/contrib/natvis/rapidjson.natvis
@@ -373,6 +377,7 @@ files:
373
377
  - ext/rj_schema/rapidjson/test/unittest/CMakeLists.txt
374
378
  - ext/rj_schema/rapidjson/test/unittest/allocatorstest.cpp
375
379
  - ext/rj_schema/rapidjson/test/unittest/bigintegertest.cpp
380
+ - ext/rj_schema/rapidjson/test/unittest/clzlltest.cpp
376
381
  - ext/rj_schema/rapidjson/test/unittest/cursorstreamwrappertest.cpp
377
382
  - ext/rj_schema/rapidjson/test/unittest/documenttest.cpp
378
383
  - ext/rj_schema/rapidjson/test/unittest/dtoatest.cpp
@@ -737,7 +742,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
737
742
  - !ruby/object:Gem::Version
738
743
  version: '0'
739
744
  requirements: []
740
- rubygems_version: 3.0.3
745
+ rubygems_version: 3.2.3
741
746
  signing_key:
742
747
  specification_version: 4
743
748
  summary: JSON schema validation with RapidJSON