json 1.8.3 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of json might be problematic. Click here for more details.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +7 -10
- data/{CHANGES → CHANGES.md} +186 -90
- data/Gemfile +10 -6
- data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
- data/{README.rdoc → README.md} +184 -133
- data/Rakefile +33 -37
- data/VERSION +1 -1
- data/ext/json/ext/fbuffer/fbuffer.h +0 -3
- data/ext/json/ext/generator/generator.c +47 -61
- data/ext/json/ext/generator/generator.h +7 -2
- data/ext/json/ext/parser/extconf.rb +3 -0
- data/ext/json/ext/parser/parser.c +374 -459
- data/ext/json/ext/parser/parser.h +4 -5
- data/ext/json/ext/parser/parser.rl +133 -181
- data/ext/json/extconf.rb +0 -1
- data/java/src/json/ext/ByteListTranscoder.java +1 -2
- data/java/src/json/ext/Generator.java +11 -12
- data/java/src/json/ext/GeneratorMethods.java +1 -2
- data/java/src/json/ext/GeneratorService.java +1 -2
- data/java/src/json/ext/GeneratorState.java +3 -56
- data/java/src/json/ext/OptionsReader.java +2 -3
- data/java/src/json/ext/Parser.java +132 -415
- data/java/src/json/ext/Parser.rl +48 -124
- data/java/src/json/ext/ParserService.java +1 -2
- data/java/src/json/ext/RuntimeInfo.java +1 -6
- data/java/src/json/ext/StringDecoder.java +1 -2
- data/java/src/json/ext/StringEncoder.java +5 -0
- data/java/src/json/ext/Utils.java +1 -2
- data/json-java.gemspec +15 -0
- data/json.gemspec +0 -0
- data/json_pure.gemspec +24 -26
- data/lib/json/add/bigdecimal.rb +1 -0
- data/lib/json/add/complex.rb +2 -1
- data/lib/json/add/core.rb +1 -0
- data/lib/json/add/date.rb +1 -1
- data/lib/json/add/date_time.rb +1 -1
- data/lib/json/add/exception.rb +1 -1
- data/lib/json/add/ostruct.rb +3 -3
- data/lib/json/add/range.rb +1 -1
- data/lib/json/add/rational.rb +1 -0
- data/lib/json/add/regexp.rb +1 -1
- data/lib/json/add/set.rb +29 -0
- data/lib/json/add/struct.rb +1 -1
- data/lib/json/add/symbol.rb +1 -1
- data/lib/json/add/time.rb +1 -1
- data/lib/json/common.rb +24 -52
- data/lib/json/ext.rb +0 -6
- data/lib/json/generic_object.rb +5 -4
- data/lib/json/pure/generator.rb +61 -125
- data/lib/json/pure/parser.rb +33 -81
- data/lib/json/pure.rb +2 -8
- data/lib/json/version.rb +2 -1
- data/lib/json.rb +1 -0
- data/references/rfc7159.txt +899 -0
- data/tests/fixtures/obsolete_fail1.json +1 -0
- data/tests/{test_json_addition.rb → json_addition_test.rb} +32 -25
- data/tests/json_common_interface_test.rb +126 -0
- data/tests/json_encoding_test.rb +107 -0
- data/tests/json_ext_parser_test.rb +15 -0
- data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
- data/tests/{test_json_generate.rb → json_generator_test.rb} +79 -39
- data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
- data/tests/json_parser_test.rb +472 -0
- data/tests/json_string_matching_test.rb +38 -0
- data/tests/{setup_variant.rb → test_helper.rb} +6 -0
- data/tools/diff.sh +18 -0
- data/tools/fuzz.rb +1 -9
- metadata +29 -47
- data/COPYING +0 -58
- data/COPYING-json-jruby +0 -57
- data/GPL +0 -340
- data/TODO +0 -1
- data/data/example.json +0 -1
- data/data/index.html +0 -38
- data/data/prototype.js +0 -4184
- data/tests/fixtures/fail1.json +0 -1
- data/tests/test_json.rb +0 -553
- data/tests/test_json_encoding.rb +0 -65
- data/tests/test_json_string_matching.rb +0 -39
- data/tests/test_json_unicode.rb +0 -72
@@ -1,8 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
|
3
3
|
*
|
4
|
-
* Distributed under the Ruby
|
5
|
-
* for details.
|
4
|
+
* Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
|
6
5
|
*/
|
7
6
|
package json.ext;
|
8
7
|
|
@@ -1,8 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
|
3
3
|
*
|
4
|
-
* Distributed under the Ruby
|
5
|
-
* for details.
|
4
|
+
* Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
|
6
5
|
*/
|
7
6
|
package json.ext;
|
8
7
|
|
@@ -208,45 +207,11 @@ public class GeneratorState extends RubyObject {
|
|
208
207
|
@JRubyMethod
|
209
208
|
public IRubyObject generate(ThreadContext context, IRubyObject obj) {
|
210
209
|
RubyString result = Generator.generateJson(context, obj, this);
|
211
|
-
if (!quirksMode && !objectOrArrayLiteral(result)) {
|
212
|
-
throw Utils.newException(context, Utils.M_GENERATOR_ERROR,
|
213
|
-
"only generation of JSON objects or arrays allowed");
|
214
|
-
}
|
215
210
|
RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
|
216
|
-
|
217
|
-
result.force_encoding(context, info.utf8.get());
|
218
|
-
}
|
211
|
+
result.force_encoding(context, info.utf8.get());
|
219
212
|
return result;
|
220
213
|
}
|
221
214
|
|
222
|
-
/**
|
223
|
-
* Ensures the given string is in the form "[...]" or "{...}", being
|
224
|
-
* possibly surrounded by white space.
|
225
|
-
* The string's encoding must be ASCII-compatible.
|
226
|
-
* @param value
|
227
|
-
* @return
|
228
|
-
*/
|
229
|
-
private static boolean objectOrArrayLiteral(RubyString value) {
|
230
|
-
ByteList bl = value.getByteList();
|
231
|
-
int len = bl.length();
|
232
|
-
|
233
|
-
for (int pos = 0; pos < len - 1; pos++) {
|
234
|
-
int b = bl.get(pos);
|
235
|
-
if (Character.isWhitespace(b)) continue;
|
236
|
-
|
237
|
-
// match the opening brace
|
238
|
-
switch (b) {
|
239
|
-
case '[':
|
240
|
-
return matchClosingBrace(bl, pos, len, ']');
|
241
|
-
case '{':
|
242
|
-
return matchClosingBrace(bl, pos, len, '}');
|
243
|
-
default:
|
244
|
-
return false;
|
245
|
-
}
|
246
|
-
}
|
247
|
-
return false;
|
248
|
-
}
|
249
|
-
|
250
215
|
private static boolean matchClosingBrace(ByteList bl, int pos, int len,
|
251
216
|
int brace) {
|
252
217
|
for (int endPos = len - 1; endPos > pos; endPos--) {
|
@@ -399,17 +364,6 @@ public class GeneratorState extends RubyObject {
|
|
399
364
|
return context.getRuntime().newBoolean(asciiOnly);
|
400
365
|
}
|
401
366
|
|
402
|
-
@JRubyMethod(name="quirks_mode")
|
403
|
-
public RubyBoolean quirks_mode_get(ThreadContext context) {
|
404
|
-
return context.getRuntime().newBoolean(quirksMode);
|
405
|
-
}
|
406
|
-
|
407
|
-
@JRubyMethod(name="quirks_mode=")
|
408
|
-
public IRubyObject quirks_mode_set(IRubyObject quirks_mode) {
|
409
|
-
quirksMode = quirks_mode.isTrue();
|
410
|
-
return quirks_mode.getRuntime().newBoolean(quirksMode);
|
411
|
-
}
|
412
|
-
|
413
367
|
@JRubyMethod(name="buffer_initial_length")
|
414
368
|
public RubyInteger buffer_initial_length_get(ThreadContext context) {
|
415
369
|
return context.getRuntime().newFixnum(bufferInitialLength);
|
@@ -422,11 +376,6 @@ public class GeneratorState extends RubyObject {
|
|
422
376
|
return buffer_initial_length;
|
423
377
|
}
|
424
378
|
|
425
|
-
@JRubyMethod(name="quirks_mode?")
|
426
|
-
public RubyBoolean quirks_mode_p(ThreadContext context) {
|
427
|
-
return context.getRuntime().newBoolean(quirksMode);
|
428
|
-
}
|
429
|
-
|
430
379
|
public int getDepth() {
|
431
380
|
return depth;
|
432
381
|
}
|
@@ -445,7 +394,7 @@ public class GeneratorState extends RubyObject {
|
|
445
394
|
private ByteList prepareByteList(ThreadContext context, IRubyObject value) {
|
446
395
|
RubyString str = value.convertToString();
|
447
396
|
RuntimeInfo info = RuntimeInfo.forRuntime(context.getRuntime());
|
448
|
-
if (
|
397
|
+
if (str.encoding(context) != info.utf8.get()) {
|
449
398
|
str = (RubyString)str.encode(context, info.utf8.get());
|
450
399
|
}
|
451
400
|
return str.getByteList().dup();
|
@@ -481,7 +430,6 @@ public class GeneratorState extends RubyObject {
|
|
481
430
|
maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
|
482
431
|
allowNaN = opts.getBool("allow_nan", DEFAULT_ALLOW_NAN);
|
483
432
|
asciiOnly = opts.getBool("ascii_only", DEFAULT_ASCII_ONLY);
|
484
|
-
quirksMode = opts.getBool("quirks_mode", DEFAULT_QUIRKS_MODE);
|
485
433
|
bufferInitialLength = opts.getInt("buffer_initial_length", DEFAULT_BUFFER_INITIAL_LENGTH);
|
486
434
|
|
487
435
|
depth = opts.getInt("depth", 0);
|
@@ -508,7 +456,6 @@ public class GeneratorState extends RubyObject {
|
|
508
456
|
result.op_aset(context, runtime.newSymbol("array_nl"), array_nl_get(context));
|
509
457
|
result.op_aset(context, runtime.newSymbol("allow_nan"), allow_nan_p(context));
|
510
458
|
result.op_aset(context, runtime.newSymbol("ascii_only"), ascii_only_p(context));
|
511
|
-
result.op_aset(context, runtime.newSymbol("quirks_mode"), quirks_mode_p(context));
|
512
459
|
result.op_aset(context, runtime.newSymbol("max_nesting"), max_nesting_get(context));
|
513
460
|
result.op_aset(context, runtime.newSymbol("depth"), depth_get(context));
|
514
461
|
result.op_aset(context, runtime.newSymbol("buffer_initial_length"), buffer_initial_length_get(context));
|
@@ -1,8 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
* This code is copyrighted work by Daniel Luz <dev at mernen dot com>.
|
3
3
|
*
|
4
|
-
* Distributed under the Ruby
|
5
|
-
* for details.
|
4
|
+
* Distributed under the Ruby license: https://www.ruby-lang.org/en/about/license.txt
|
6
5
|
*/
|
7
6
|
package json.ext;
|
8
7
|
|
@@ -85,7 +84,7 @@ final class OptionsReader {
|
|
85
84
|
|
86
85
|
RubyString str = value.convertToString();
|
87
86
|
RuntimeInfo info = getRuntimeInfo();
|
88
|
-
if (
|
87
|
+
if (str.encoding(context) != info.utf8.get()) {
|
89
88
|
str = (RubyString)str.encode(context, info.utf8.get());
|
90
89
|
}
|
91
90
|
return str;
|