json 2.3.1 → 2.6.2
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/CHANGES.md +38 -5
- data/LICENSE +56 -0
- data/README.md +3 -3
- data/VERSION +1 -1
- data/ext/json/ext/generator/generator.c +61 -22
- data/ext/json/ext/generator/generator.h +5 -2
- data/ext/json/ext/parser/extconf.rb +26 -0
- data/ext/json/ext/parser/parser.c +2980 -1770
- data/ext/json/ext/parser/parser.h +6 -1
- data/ext/json/ext/parser/parser.rl +127 -38
- data/ext/json/extconf.rb +1 -0
- data/json.gemspec +8 -80
- data/lib/json/add/complex.rb +0 -1
- data/lib/json/add/rational.rb +0 -1
- data/lib/json/common.rb +240 -228
- data/lib/json/pure/generator.rb +28 -8
- data/lib/json/pure/parser.rb +21 -3
- data/lib/json/version.rb +1 -1
- data/lib/json.rb +172 -1
- metadata +8 -110
- data/.gitignore +0 -18
- data/.travis.yml +0 -26
- data/Gemfile +0 -14
- data/README-json-jruby.md +0 -33
- data/Rakefile +0 -334
- data/diagrams/.keep +0 -0
- data/install.rb +0 -23
- data/java/src/json/ext/ByteListTranscoder.java +0 -166
- data/java/src/json/ext/Generator.java +0 -466
- data/java/src/json/ext/GeneratorMethods.java +0 -231
- data/java/src/json/ext/GeneratorService.java +0 -42
- data/java/src/json/ext/GeneratorState.java +0 -490
- data/java/src/json/ext/OptionsReader.java +0 -113
- data/java/src/json/ext/Parser.java +0 -2362
- data/java/src/json/ext/Parser.rl +0 -893
- data/java/src/json/ext/ParserService.java +0 -34
- data/java/src/json/ext/RuntimeInfo.java +0 -116
- data/java/src/json/ext/StringDecoder.java +0 -166
- data/java/src/json/ext/StringEncoder.java +0 -111
- data/java/src/json/ext/Utils.java +0 -88
- data/json-java.gemspec +0 -37
- data/json_pure.gemspec +0 -33
- data/lib/json/ext/.keep +0 -0
- data/references/rfc7159.txt +0 -899
- data/tests/fixtures/fail10.json +0 -1
- data/tests/fixtures/fail11.json +0 -1
- data/tests/fixtures/fail12.json +0 -1
- data/tests/fixtures/fail13.json +0 -1
- data/tests/fixtures/fail14.json +0 -1
- data/tests/fixtures/fail18.json +0 -1
- data/tests/fixtures/fail19.json +0 -1
- data/tests/fixtures/fail2.json +0 -1
- data/tests/fixtures/fail20.json +0 -1
- data/tests/fixtures/fail21.json +0 -1
- data/tests/fixtures/fail22.json +0 -1
- data/tests/fixtures/fail23.json +0 -1
- data/tests/fixtures/fail24.json +0 -1
- data/tests/fixtures/fail25.json +0 -1
- data/tests/fixtures/fail27.json +0 -2
- data/tests/fixtures/fail28.json +0 -2
- data/tests/fixtures/fail3.json +0 -1
- data/tests/fixtures/fail4.json +0 -1
- data/tests/fixtures/fail5.json +0 -1
- data/tests/fixtures/fail6.json +0 -1
- data/tests/fixtures/fail7.json +0 -1
- data/tests/fixtures/fail8.json +0 -1
- data/tests/fixtures/fail9.json +0 -1
- data/tests/fixtures/obsolete_fail1.json +0 -1
- data/tests/fixtures/pass1.json +0 -56
- data/tests/fixtures/pass15.json +0 -1
- data/tests/fixtures/pass16.json +0 -1
- data/tests/fixtures/pass17.json +0 -1
- data/tests/fixtures/pass2.json +0 -1
- data/tests/fixtures/pass26.json +0 -1
- data/tests/fixtures/pass3.json +0 -6
- data/tests/json_addition_test.rb +0 -203
- data/tests/json_common_interface_test.rb +0 -126
- data/tests/json_encoding_test.rb +0 -107
- data/tests/json_ext_parser_test.rb +0 -15
- data/tests/json_fixtures_test.rb +0 -37
- data/tests/json_generator_test.rb +0 -421
- data/tests/json_generic_object_test.rb +0 -82
- data/tests/json_parser_test.rb +0 -472
- data/tests/json_string_matching_test.rb +0 -38
- data/tests/test_helper.rb +0 -17
- data/tools/diff.sh +0 -18
- data/tools/fuzz.rb +0 -131
- data/tools/server.rb +0 -62
|
@@ -13,6 +13,10 @@
|
|
|
13
13
|
#include "st.h"
|
|
14
14
|
#endif
|
|
15
15
|
|
|
16
|
+
#ifndef MAYBE_UNUSED
|
|
17
|
+
# define MAYBE_UNUSED(x) x
|
|
18
|
+
#endif
|
|
19
|
+
|
|
16
20
|
#define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
|
|
17
21
|
|
|
18
22
|
/* unicode */
|
|
@@ -37,6 +41,7 @@ typedef struct JSON_ParserStruct {
|
|
|
37
41
|
int allow_nan;
|
|
38
42
|
int parsing_name;
|
|
39
43
|
int symbolize_names;
|
|
44
|
+
int freeze;
|
|
40
45
|
VALUE object_class;
|
|
41
46
|
VALUE array_class;
|
|
42
47
|
VALUE decimal_class;
|
|
@@ -62,7 +67,7 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
62
67
|
static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
63
68
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
64
69
|
static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *result, int current_nesting);
|
|
65
|
-
static VALUE json_string_unescape(
|
|
70
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize);
|
|
66
71
|
static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *result);
|
|
67
72
|
static VALUE convert_encoding(VALUE source);
|
|
68
73
|
static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self);
|
|
@@ -89,13 +89,12 @@ static int convert_UTF32_to_UTF8(char *buf, UTF32 ch)
|
|
|
89
89
|
|
|
90
90
|
static VALUE mJSON, mExt, cParser, eParserError, eNestingError;
|
|
91
91
|
static VALUE CNaN, CInfinity, CMinusInfinity;
|
|
92
|
-
static VALUE cBigDecimal = Qundef;
|
|
93
92
|
|
|
94
93
|
static ID i_json_creatable_p, i_json_create, i_create_id, i_create_additions,
|
|
95
94
|
i_chr, i_max_nesting, i_allow_nan, i_symbolize_names,
|
|
96
95
|
i_object_class, i_array_class, i_decimal_class, i_key_p,
|
|
97
96
|
i_deep_const_get, i_match, i_match_string, i_aset, i_aref,
|
|
98
|
-
i_leftshift, i_new,
|
|
97
|
+
i_leftshift, i_new, i_try_convert, i_freeze, i_uminus;
|
|
99
98
|
|
|
100
99
|
%%{
|
|
101
100
|
machine JSON_common;
|
|
@@ -290,6 +289,10 @@ static char *JSON_parse_value(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
290
289
|
%% write init;
|
|
291
290
|
%% write exec;
|
|
292
291
|
|
|
292
|
+
if (json->freeze) {
|
|
293
|
+
OBJ_FREEZE(*result);
|
|
294
|
+
}
|
|
295
|
+
|
|
293
296
|
if (cs >= JSON_value_first_final) {
|
|
294
297
|
return p;
|
|
295
298
|
} else {
|
|
@@ -341,19 +344,6 @@ static char *JSON_parse_integer(JSON_Parser *json, char *p, char *pe, VALUE *res
|
|
|
341
344
|
) (^[0-9Ee.\-]? @exit );
|
|
342
345
|
}%%
|
|
343
346
|
|
|
344
|
-
static int is_bigdecimal_class(VALUE obj)
|
|
345
|
-
{
|
|
346
|
-
if (cBigDecimal == Qundef) {
|
|
347
|
-
if (rb_const_defined(rb_cObject, i_BigDecimal)) {
|
|
348
|
-
cBigDecimal = rb_const_get_at(rb_cObject, i_BigDecimal);
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
return 0;
|
|
352
|
-
}
|
|
353
|
-
}
|
|
354
|
-
return obj == cBigDecimal;
|
|
355
|
-
}
|
|
356
|
-
|
|
357
347
|
static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *result)
|
|
358
348
|
{
|
|
359
349
|
int cs = EVIL;
|
|
@@ -363,21 +353,46 @@ static char *JSON_parse_float(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
363
353
|
%% write exec;
|
|
364
354
|
|
|
365
355
|
if (cs >= JSON_float_first_final) {
|
|
356
|
+
VALUE mod = Qnil;
|
|
357
|
+
ID method_id = 0;
|
|
358
|
+
if (rb_respond_to(json->decimal_class, i_try_convert)) {
|
|
359
|
+
mod = json->decimal_class;
|
|
360
|
+
method_id = i_try_convert;
|
|
361
|
+
} else if (rb_respond_to(json->decimal_class, i_new)) {
|
|
362
|
+
mod = json->decimal_class;
|
|
363
|
+
method_id = i_new;
|
|
364
|
+
} else if (RB_TYPE_P(json->decimal_class, T_CLASS)) {
|
|
365
|
+
VALUE name = rb_class_name(json->decimal_class);
|
|
366
|
+
const char *name_cstr = RSTRING_PTR(name);
|
|
367
|
+
const char *last_colon = strrchr(name_cstr, ':');
|
|
368
|
+
if (last_colon) {
|
|
369
|
+
const char *mod_path_end = last_colon - 1;
|
|
370
|
+
VALUE mod_path = rb_str_substr(name, 0, mod_path_end - name_cstr);
|
|
371
|
+
mod = rb_path_to_class(mod_path);
|
|
372
|
+
|
|
373
|
+
const char *method_name_beg = last_colon + 1;
|
|
374
|
+
long before_len = method_name_beg - name_cstr;
|
|
375
|
+
long len = RSTRING_LEN(name) - before_len;
|
|
376
|
+
VALUE method_name = rb_str_substr(name, before_len, len);
|
|
377
|
+
method_id = SYM2ID(rb_str_intern(method_name));
|
|
378
|
+
} else {
|
|
379
|
+
mod = rb_mKernel;
|
|
380
|
+
method_id = SYM2ID(rb_str_intern(name));
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
366
384
|
long len = p - json->memo;
|
|
367
385
|
fbuffer_clear(json->fbuffer);
|
|
368
386
|
fbuffer_append(json->fbuffer, json->memo, len);
|
|
369
387
|
fbuffer_append_char(json->fbuffer, '\0');
|
|
370
|
-
|
|
371
|
-
|
|
388
|
+
|
|
389
|
+
if (method_id) {
|
|
390
|
+
VALUE text = rb_str_new2(FBUFFER_PTR(json->fbuffer));
|
|
391
|
+
*result = rb_funcallv(mod, method_id, 1, &text);
|
|
372
392
|
} else {
|
|
373
|
-
|
|
374
|
-
text = rb_str_new2(FBUFFER_PTR(json->fbuffer));
|
|
375
|
-
if (is_bigdecimal_class(json->decimal_class)) {
|
|
376
|
-
*result = rb_funcall(Qnil, i_BigDecimal, 1, text);
|
|
377
|
-
} else {
|
|
378
|
-
*result = rb_funcall(json->decimal_class, i_new, 1, text);
|
|
379
|
-
}
|
|
393
|
+
*result = DBL2NUM(rb_cstr_to_dbl(FBUFFER_PTR(json->fbuffer), 1));
|
|
380
394
|
}
|
|
395
|
+
|
|
381
396
|
return p + 1;
|
|
382
397
|
} else {
|
|
383
398
|
return NULL;
|
|
@@ -437,17 +452,37 @@ static char *JSON_parse_array(JSON_Parser *json, char *p, char *pe, VALUE *resul
|
|
|
437
452
|
}
|
|
438
453
|
}
|
|
439
454
|
|
|
440
|
-
static
|
|
455
|
+
static const size_t MAX_STACK_BUFFER_SIZE = 128;
|
|
456
|
+
static VALUE json_string_unescape(char *string, char *stringEnd, int intern, int symbolize)
|
|
441
457
|
{
|
|
442
|
-
|
|
458
|
+
VALUE result = Qnil;
|
|
459
|
+
size_t bufferSize = stringEnd - string;
|
|
460
|
+
char *p = string, *pe = string, *unescape, *bufferStart, *buffer;
|
|
443
461
|
int unescape_len;
|
|
444
462
|
char buf[4];
|
|
445
463
|
|
|
464
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
465
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
466
|
+
bufferStart = buffer = ALLOC_N(char, bufferSize ? bufferSize : 1);
|
|
467
|
+
# else
|
|
468
|
+
bufferStart = buffer = ALLOC_N(char, bufferSize);
|
|
469
|
+
# endif
|
|
470
|
+
} else {
|
|
471
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
472
|
+
bufferStart = buffer = ALLOCA_N(char, bufferSize ? bufferSize : 1);
|
|
473
|
+
# else
|
|
474
|
+
bufferStart = buffer = ALLOCA_N(char, bufferSize);
|
|
475
|
+
# endif
|
|
476
|
+
}
|
|
477
|
+
|
|
446
478
|
while (pe < stringEnd) {
|
|
447
479
|
if (*pe == '\\') {
|
|
448
480
|
unescape = (char *) "?";
|
|
449
481
|
unescape_len = 1;
|
|
450
|
-
if (pe > p)
|
|
482
|
+
if (pe > p) {
|
|
483
|
+
MEMCPY(buffer, p, char, pe - p);
|
|
484
|
+
buffer += pe - p;
|
|
485
|
+
}
|
|
451
486
|
switch (*++pe) {
|
|
452
487
|
case 'n':
|
|
453
488
|
unescape = (char *) "\n";
|
|
@@ -472,6 +507,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
472
507
|
break;
|
|
473
508
|
case 'u':
|
|
474
509
|
if (pe > stringEnd - 4) {
|
|
510
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
511
|
+
free(bufferStart);
|
|
512
|
+
}
|
|
475
513
|
rb_enc_raise(
|
|
476
514
|
EXC_ENCODING eParserError,
|
|
477
515
|
"%u: incomplete unicode character escape sequence at '%s'", __LINE__, p
|
|
@@ -482,6 +520,9 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
482
520
|
if (UNI_SUR_HIGH_START == (ch & 0xFC00)) {
|
|
483
521
|
pe++;
|
|
484
522
|
if (pe > stringEnd - 6) {
|
|
523
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
524
|
+
free(bufferStart);
|
|
525
|
+
}
|
|
485
526
|
rb_enc_raise(
|
|
486
527
|
EXC_ENCODING eParserError,
|
|
487
528
|
"%u: incomplete surrogate pair at '%s'", __LINE__, p
|
|
@@ -505,13 +546,55 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
505
546
|
p = pe;
|
|
506
547
|
continue;
|
|
507
548
|
}
|
|
508
|
-
|
|
549
|
+
MEMCPY(buffer, unescape, char, unescape_len);
|
|
550
|
+
buffer += unescape_len;
|
|
509
551
|
p = ++pe;
|
|
510
552
|
} else {
|
|
511
553
|
pe++;
|
|
512
554
|
}
|
|
513
555
|
}
|
|
514
|
-
|
|
556
|
+
|
|
557
|
+
if (pe > p) {
|
|
558
|
+
MEMCPY(buffer, p, char, pe - p);
|
|
559
|
+
buffer += pe - p;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
# ifdef HAVE_RB_ENC_INTERNED_STR
|
|
563
|
+
if (intern) {
|
|
564
|
+
result = rb_enc_interned_str(bufferStart, (long)(buffer - bufferStart), rb_utf8_encoding());
|
|
565
|
+
} else {
|
|
566
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
|
567
|
+
}
|
|
568
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
569
|
+
free(bufferStart);
|
|
570
|
+
}
|
|
571
|
+
# else
|
|
572
|
+
result = rb_utf8_str_new(bufferStart, (long)(buffer - bufferStart));
|
|
573
|
+
|
|
574
|
+
if (bufferSize > MAX_STACK_BUFFER_SIZE) {
|
|
575
|
+
free(bufferStart);
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
if (intern) {
|
|
579
|
+
# if STR_UMINUS_DEDUPE_FROZEN
|
|
580
|
+
// Starting from MRI 2.8 it is preferable to freeze the string
|
|
581
|
+
// before deduplication so that it can be interned directly
|
|
582
|
+
// otherwise it would be duplicated first which is wasteful.
|
|
583
|
+
result = rb_funcall(rb_str_freeze(result), i_uminus, 0);
|
|
584
|
+
# elif STR_UMINUS_DEDUPE
|
|
585
|
+
// MRI 2.5 and older do not deduplicate strings that are already
|
|
586
|
+
// frozen.
|
|
587
|
+
result = rb_funcall(result, i_uminus, 0);
|
|
588
|
+
# else
|
|
589
|
+
result = rb_str_freeze(result);
|
|
590
|
+
# endif
|
|
591
|
+
}
|
|
592
|
+
# endif
|
|
593
|
+
|
|
594
|
+
if (symbolize) {
|
|
595
|
+
result = rb_str_intern(result);
|
|
596
|
+
}
|
|
597
|
+
|
|
515
598
|
return result;
|
|
516
599
|
}
|
|
517
600
|
|
|
@@ -522,12 +605,11 @@ static VALUE json_string_unescape(VALUE result, char *string, char *stringEnd)
|
|
|
522
605
|
write data;
|
|
523
606
|
|
|
524
607
|
action parse_string {
|
|
525
|
-
*result = json_string_unescape(
|
|
608
|
+
*result = json_string_unescape(json->memo + 1, p, json->parsing_name || json-> freeze, json->parsing_name && json->symbolize_names);
|
|
526
609
|
if (NIL_P(*result)) {
|
|
527
610
|
fhold;
|
|
528
611
|
fbreak;
|
|
529
612
|
} else {
|
|
530
|
-
FORCE_UTF8(*result);
|
|
531
613
|
fexec p + 1;
|
|
532
614
|
}
|
|
533
615
|
}
|
|
@@ -554,7 +636,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
|
554
636
|
int cs = EVIL;
|
|
555
637
|
VALUE match_string;
|
|
556
638
|
|
|
557
|
-
*result = rb_str_buf_new(0);
|
|
558
639
|
%% write init;
|
|
559
640
|
json->memo = p;
|
|
560
641
|
%% write exec;
|
|
@@ -570,11 +651,6 @@ static char *JSON_parse_string(JSON_Parser *json, char *p, char *pe, VALUE *resu
|
|
|
570
651
|
}
|
|
571
652
|
}
|
|
572
653
|
|
|
573
|
-
if (json->symbolize_names && json->parsing_name) {
|
|
574
|
-
*result = rb_str_intern(*result);
|
|
575
|
-
} else if (RB_TYPE_P(*result, T_STRING)) {
|
|
576
|
-
rb_str_resize(*result, RSTRING_LEN(*result));
|
|
577
|
-
}
|
|
578
654
|
if (cs >= JSON_string_first_final) {
|
|
579
655
|
return p + 1;
|
|
580
656
|
} else {
|
|
@@ -681,6 +757,12 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
681
757
|
} else {
|
|
682
758
|
json->symbolize_names = 0;
|
|
683
759
|
}
|
|
760
|
+
tmp = ID2SYM(i_freeze);
|
|
761
|
+
if (option_given_p(opts, tmp)) {
|
|
762
|
+
json->freeze = RTEST(rb_hash_aref(opts, tmp)) ? 1 : 0;
|
|
763
|
+
} else {
|
|
764
|
+
json->freeze = 0;
|
|
765
|
+
}
|
|
684
766
|
tmp = ID2SYM(i_create_additions);
|
|
685
767
|
if (option_given_p(opts, tmp)) {
|
|
686
768
|
json->create_additions = RTEST(rb_hash_aref(opts, tmp));
|
|
@@ -765,6 +847,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
|
|
|
765
847
|
*
|
|
766
848
|
* Parses the current JSON text _source_ and returns the complete data
|
|
767
849
|
* structure as a result.
|
|
850
|
+
* It raises JSON::ParseError if fail to parse.
|
|
768
851
|
*/
|
|
769
852
|
static VALUE cParser_parse(VALUE self)
|
|
770
853
|
{
|
|
@@ -843,6 +926,10 @@ static VALUE cParser_source(VALUE self)
|
|
|
843
926
|
|
|
844
927
|
void Init_parser(void)
|
|
845
928
|
{
|
|
929
|
+
#ifdef HAVE_RB_EXT_RACTOR_SAFE
|
|
930
|
+
rb_ext_ractor_safe(true);
|
|
931
|
+
#endif
|
|
932
|
+
|
|
846
933
|
#undef rb_intern
|
|
847
934
|
rb_require("json/common");
|
|
848
935
|
mJSON = rb_define_module("JSON");
|
|
@@ -885,7 +972,9 @@ void Init_parser(void)
|
|
|
885
972
|
i_aref = rb_intern("[]");
|
|
886
973
|
i_leftshift = rb_intern("<<");
|
|
887
974
|
i_new = rb_intern("new");
|
|
888
|
-
|
|
975
|
+
i_try_convert = rb_intern("try_convert");
|
|
976
|
+
i_freeze = rb_intern("freeze");
|
|
977
|
+
i_uminus = rb_intern("-@");
|
|
889
978
|
}
|
|
890
979
|
|
|
891
980
|
/*
|
data/ext/json/extconf.rb
CHANGED
data/json.gemspec
CHANGED
|
@@ -2,25 +2,22 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "json"
|
|
5
|
-
s.version = File.read('VERSION').chomp
|
|
5
|
+
s.version = File.read(File.expand_path('../VERSION', __FILE__)).chomp
|
|
6
6
|
|
|
7
|
-
s.
|
|
8
|
-
s.require_paths = ["lib"]
|
|
9
|
-
s.authors = ["Florian Frank"]
|
|
7
|
+
s.summary = "JSON Implementation for Ruby"
|
|
10
8
|
s.description = "This is a JSON implementation as a Ruby extension in C."
|
|
9
|
+
s.licenses = ["Ruby"]
|
|
10
|
+
s.authors = ["Florian Frank"]
|
|
11
11
|
s.email = "flori@ping.de"
|
|
12
|
+
|
|
12
13
|
s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb", "ext/json/extconf.rb"]
|
|
13
14
|
s.extra_rdoc_files = ["README.md"]
|
|
15
|
+
s.rdoc_options = ["--title", "JSON implementation for Ruby", "--main", "README.md"]
|
|
14
16
|
s.files = [
|
|
15
|
-
".gitignore",
|
|
16
|
-
".travis.yml",
|
|
17
17
|
"CHANGES.md",
|
|
18
|
-
"
|
|
19
|
-
"README-json-jruby.md",
|
|
18
|
+
"LICENSE",
|
|
20
19
|
"README.md",
|
|
21
|
-
"Rakefile",
|
|
22
20
|
"VERSION",
|
|
23
|
-
"diagrams/.keep",
|
|
24
21
|
"ext/json/ext/fbuffer/fbuffer.h",
|
|
25
22
|
"ext/json/ext/generator/depend",
|
|
26
23
|
"ext/json/ext/generator/extconf.rb",
|
|
@@ -32,23 +29,7 @@ Gem::Specification.new do |s|
|
|
|
32
29
|
"ext/json/ext/parser/parser.h",
|
|
33
30
|
"ext/json/ext/parser/parser.rl",
|
|
34
31
|
"ext/json/extconf.rb",
|
|
35
|
-
"install.rb",
|
|
36
|
-
"java/src/json/ext/ByteListTranscoder.java",
|
|
37
|
-
"java/src/json/ext/Generator.java",
|
|
38
|
-
"java/src/json/ext/GeneratorMethods.java",
|
|
39
|
-
"java/src/json/ext/GeneratorService.java",
|
|
40
|
-
"java/src/json/ext/GeneratorState.java",
|
|
41
|
-
"java/src/json/ext/OptionsReader.java",
|
|
42
|
-
"java/src/json/ext/Parser.java",
|
|
43
|
-
"java/src/json/ext/Parser.rl",
|
|
44
|
-
"java/src/json/ext/ParserService.java",
|
|
45
|
-
"java/src/json/ext/RuntimeInfo.java",
|
|
46
|
-
"java/src/json/ext/StringDecoder.java",
|
|
47
|
-
"java/src/json/ext/StringEncoder.java",
|
|
48
|
-
"java/src/json/ext/Utils.java",
|
|
49
|
-
"json-java.gemspec",
|
|
50
32
|
"json.gemspec",
|
|
51
|
-
"json_pure.gemspec",
|
|
52
33
|
"lib/json.rb",
|
|
53
34
|
"lib/json/add/bigdecimal.rb",
|
|
54
35
|
"lib/json/add/complex.rb",
|
|
@@ -66,58 +47,11 @@ Gem::Specification.new do |s|
|
|
|
66
47
|
"lib/json/add/time.rb",
|
|
67
48
|
"lib/json/common.rb",
|
|
68
49
|
"lib/json/ext.rb",
|
|
69
|
-
"lib/json/ext/.keep",
|
|
70
50
|
"lib/json/generic_object.rb",
|
|
71
51
|
"lib/json/pure.rb",
|
|
72
52
|
"lib/json/pure/generator.rb",
|
|
73
53
|
"lib/json/pure/parser.rb",
|
|
74
54
|
"lib/json/version.rb",
|
|
75
|
-
"references/rfc7159.txt",
|
|
76
|
-
"tests/fixtures/fail10.json",
|
|
77
|
-
"tests/fixtures/fail11.json",
|
|
78
|
-
"tests/fixtures/fail12.json",
|
|
79
|
-
"tests/fixtures/fail13.json",
|
|
80
|
-
"tests/fixtures/fail14.json",
|
|
81
|
-
"tests/fixtures/fail18.json",
|
|
82
|
-
"tests/fixtures/fail19.json",
|
|
83
|
-
"tests/fixtures/fail2.json",
|
|
84
|
-
"tests/fixtures/fail20.json",
|
|
85
|
-
"tests/fixtures/fail21.json",
|
|
86
|
-
"tests/fixtures/fail22.json",
|
|
87
|
-
"tests/fixtures/fail23.json",
|
|
88
|
-
"tests/fixtures/fail24.json",
|
|
89
|
-
"tests/fixtures/fail25.json",
|
|
90
|
-
"tests/fixtures/fail27.json",
|
|
91
|
-
"tests/fixtures/fail28.json",
|
|
92
|
-
"tests/fixtures/fail3.json",
|
|
93
|
-
"tests/fixtures/fail4.json",
|
|
94
|
-
"tests/fixtures/fail5.json",
|
|
95
|
-
"tests/fixtures/fail6.json",
|
|
96
|
-
"tests/fixtures/fail7.json",
|
|
97
|
-
"tests/fixtures/fail8.json",
|
|
98
|
-
"tests/fixtures/fail9.json",
|
|
99
|
-
"tests/fixtures/obsolete_fail1.json",
|
|
100
|
-
"tests/fixtures/pass1.json",
|
|
101
|
-
"tests/fixtures/pass15.json",
|
|
102
|
-
"tests/fixtures/pass16.json",
|
|
103
|
-
"tests/fixtures/pass17.json",
|
|
104
|
-
"tests/fixtures/pass2.json",
|
|
105
|
-
"tests/fixtures/pass26.json",
|
|
106
|
-
"tests/fixtures/pass3.json",
|
|
107
|
-
"tests/json_addition_test.rb",
|
|
108
|
-
"tests/json_common_interface_test.rb",
|
|
109
|
-
"tests/json_encoding_test.rb",
|
|
110
|
-
"tests/json_ext_parser_test.rb",
|
|
111
|
-
"tests/json_fixtures_test.rb",
|
|
112
|
-
"tests/json_generator_test.rb",
|
|
113
|
-
"tests/json_generic_object_test.rb",
|
|
114
|
-
"tests/json_parser_test.rb",
|
|
115
|
-
"tests/json_string_matching_test.rb",
|
|
116
|
-
"tests/test_helper.rb",
|
|
117
|
-
"tests/test_helper.rb",
|
|
118
|
-
"tools/diff.sh",
|
|
119
|
-
"tools/fuzz.rb",
|
|
120
|
-
"tools/server.rb",
|
|
121
55
|
]
|
|
122
56
|
s.homepage = "http://flori.github.com/json"
|
|
123
57
|
s.metadata = {
|
|
@@ -128,12 +62,6 @@ Gem::Specification.new do |s|
|
|
|
128
62
|
'source_code_uri' => 'https://github.com/flori/json',
|
|
129
63
|
'wiki_uri' => 'https://github.com/flori/json/wiki'
|
|
130
64
|
}
|
|
131
|
-
s.licenses = ["Ruby"]
|
|
132
|
-
s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.md"]
|
|
133
|
-
s.required_ruby_version = Gem::Requirement.new(">= 2.0")
|
|
134
|
-
s.summary = "JSON Implementation for Ruby"
|
|
135
|
-
s.test_files = ["tests/test_helper.rb"]
|
|
136
65
|
|
|
137
|
-
s.
|
|
138
|
-
s.add_development_dependency("test-unit", [">= 2.0", "< 4.0"])
|
|
66
|
+
s.required_ruby_version = Gem::Requirement.new(">= 2.3")
|
|
139
67
|
end
|
data/lib/json/add/complex.rb
CHANGED