json 1.8.6 → 2.3.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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +11 -5
- data/{CHANGES → CHANGES.md} +179 -95
- data/Gemfile +10 -3
- data/LICENSE +56 -0
- data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
- data/README.md +171 -107
- data/Rakefile +33 -22
- data/VERSION +1 -1
- data/ext/json/ext/fbuffer/fbuffer.h +0 -3
- data/ext/json/ext/generator/generator.c +105 -98
- data/ext/json/ext/generator/generator.h +0 -6
- data/ext/json/ext/parser/extconf.rb +3 -0
- data/ext/json/ext/parser/parser.c +376 -480
- data/ext/json/ext/parser/parser.h +4 -5
- data/ext/json/ext/parser/parser.rl +108 -175
- data/ext/json/extconf.rb +0 -1
- data/java/src/json/ext/Generator.java +35 -15
- data/java/src/json/ext/GeneratorState.java +2 -54
- data/java/src/json/ext/OptionsReader.java +1 -1
- data/java/src/json/ext/Parser.java +131 -413
- data/java/src/json/ext/Parser.rl +47 -122
- data/java/src/json/ext/RuntimeInfo.java +0 -4
- data/json-java.gemspec +1 -2
- data/json.gemspec +0 -0
- data/json_pure.gemspec +8 -7
- data/lib/json.rb +1 -0
- data/lib/json/add/bigdecimal.rb +3 -2
- data/lib/json/add/complex.rb +4 -3
- 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 +3 -2
- data/lib/json/add/regexp.rb +3 -3
- 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 +26 -54
- data/lib/json/ext.rb +0 -6
- data/lib/json/generic_object.rb +5 -4
- data/lib/json/pure.rb +2 -8
- data/lib/json/pure/generator.rb +53 -124
- data/lib/json/pure/parser.rb +41 -81
- data/lib/json/version.rb +2 -1
- 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} +112 -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/fuzz.rb +1 -9
- metadata +22 -37
- 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 -519
- 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
data/java/src/json/ext/Parser.rl
CHANGED
@@ -50,9 +50,9 @@ public class Parser extends RubyObject {
|
|
50
50
|
private int maxNesting;
|
51
51
|
private boolean allowNaN;
|
52
52
|
private boolean symbolizeNames;
|
53
|
-
private boolean quirksMode;
|
54
53
|
private RubyClass objectClass;
|
55
54
|
private RubyClass arrayClass;
|
55
|
+
private RubyClass decimalClass;
|
56
56
|
private RubyHash match_string;
|
57
57
|
|
58
58
|
private static final int DEFAULT_MAX_NESTING = 100;
|
@@ -121,10 +121,6 @@ public class Parser extends RubyObject {
|
|
121
121
|
* <dd>If set to <code>true</code>, returns symbols for the names (keys) in
|
122
122
|
* a JSON object. Otherwise strings are returned, which is also the default.
|
123
123
|
*
|
124
|
-
* <dt><code>:quirks_mode?</code>
|
125
|
-
* <dd>If set to <code>true</code>, if the parse is in quirks_mode, false
|
126
|
-
* otherwise.
|
127
|
-
*
|
128
124
|
* <dt><code>:create_additions</code>
|
129
125
|
* <dd>If set to <code>false</code>, the Parser doesn't create additions
|
130
126
|
* even if a matching class and <code>create_id</code> was found. This option
|
@@ -136,9 +132,10 @@ public class Parser extends RubyObject {
|
|
136
132
|
* <dt><code>:array_class</code>
|
137
133
|
* <dd>Defaults to Array.
|
138
134
|
*
|
139
|
-
* <dt><code>:
|
140
|
-
* <dd>
|
141
|
-
*
|
135
|
+
* <dt><code>:decimal_class</code>
|
136
|
+
* <dd>Specifies which class to use instead of the default (Float) when
|
137
|
+
* parsing decimal numbers. This class must accept a single string argument
|
138
|
+
* in its constructor.
|
142
139
|
* </dl>
|
143
140
|
*/
|
144
141
|
@JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
|
@@ -161,15 +158,21 @@ public class Parser extends RubyObject {
|
|
161
158
|
this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
|
162
159
|
this.allowNaN = opts.getBool("allow_nan", false);
|
163
160
|
this.symbolizeNames = opts.getBool("symbolize_names", false);
|
164
|
-
this.quirksMode = opts.getBool("quirks_mode", false);
|
165
161
|
this.createId = opts.getString("create_id", getCreateId(context));
|
166
162
|
this.createAdditions = opts.getBool("create_additions", false);
|
167
163
|
this.objectClass = opts.getClass("object_class", runtime.getHash());
|
168
164
|
this.arrayClass = opts.getClass("array_class", runtime.getArray());
|
165
|
+
this.decimalClass = opts.getClass("decimal_class", null);
|
169
166
|
this.match_string = opts.getHash("match_string");
|
170
167
|
|
168
|
+
if(symbolizeNames && createAdditions) {
|
169
|
+
throw runtime.newArgumentError(
|
170
|
+
"options :symbolize_names and :create_additions cannot be " +
|
171
|
+
" used in conjunction"
|
172
|
+
);
|
173
|
+
}
|
171
174
|
this.vSource = args[0].convertToString();
|
172
|
-
|
175
|
+
this.vSource = convertEncoding(context, vSource);
|
173
176
|
|
174
177
|
return this;
|
175
178
|
}
|
@@ -180,33 +183,16 @@ public class Parser extends RubyObject {
|
|
180
183
|
* Returns the source string if no conversion is needed.
|
181
184
|
*/
|
182
185
|
private RubyString convertEncoding(ThreadContext context, RubyString source) {
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
return (RubyString)source.encode(context, info.utf8.get());
|
194
|
-
}
|
195
|
-
|
196
|
-
String sniffedEncoding = sniffByteList(bl);
|
197
|
-
if (sniffedEncoding == null) return source; // assume UTF-8
|
198
|
-
return reinterpretEncoding(context, source, sniffedEncoding);
|
199
|
-
}
|
200
|
-
|
201
|
-
String sniffedEncoding = sniffByteList(bl);
|
202
|
-
if (sniffedEncoding == null) return source; // assume UTF-8
|
203
|
-
Ruby runtime = context.getRuntime();
|
204
|
-
return (RubyString)info.jsonModule.get().
|
205
|
-
callMethod(context, "iconv",
|
206
|
-
new IRubyObject[] {
|
207
|
-
runtime.newString("utf-8"),
|
208
|
-
runtime.newString(sniffedEncoding),
|
209
|
-
source});
|
186
|
+
RubyEncoding encoding = (RubyEncoding)source.encoding(context);
|
187
|
+
if (encoding == info.ascii8bit.get()) {
|
188
|
+
if (source.isFrozen()) {
|
189
|
+
source = (RubyString) source.dup();
|
190
|
+
}
|
191
|
+
source.force_encoding(context, info.utf8.get());
|
192
|
+
} else {
|
193
|
+
source = (RubyString) source.encode(context, info.utf8.get());
|
194
|
+
}
|
195
|
+
return source;
|
210
196
|
}
|
211
197
|
|
212
198
|
/**
|
@@ -259,17 +245,6 @@ public class Parser extends RubyObject {
|
|
259
245
|
return checkAndGetSource().dup();
|
260
246
|
}
|
261
247
|
|
262
|
-
/**
|
263
|
-
* <code>Parser#quirks_mode?()</code>
|
264
|
-
*
|
265
|
-
* <p>If set to <code>true</code>, if the parse is in quirks_mode, false
|
266
|
-
* otherwise.
|
267
|
-
*/
|
268
|
-
@JRubyMethod(name = "quirks_mode?")
|
269
|
-
public IRubyObject quirks_mode_p(ThreadContext context) {
|
270
|
-
return context.getRuntime().newBoolean(quirksMode);
|
271
|
-
}
|
272
|
-
|
273
248
|
public RubyString checkAndGetSource() {
|
274
249
|
if (vSource != null) {
|
275
250
|
return vSource;
|
@@ -393,7 +368,7 @@ public class Parser extends RubyObject {
|
|
393
368
|
}
|
394
369
|
}
|
395
370
|
action parse_number {
|
396
|
-
if (pe > fpc +
|
371
|
+
if (pe > fpc + 8 &&
|
397
372
|
absSubSequence(fpc, fpc + 9).equals(JSON_MINUS_INFINITY)) {
|
398
373
|
|
399
374
|
if (parser.allowNaN) {
|
@@ -520,13 +495,13 @@ public class Parser extends RubyObject {
|
|
520
495
|
|
521
496
|
return p;
|
522
497
|
}
|
523
|
-
|
498
|
+
|
524
499
|
RubyInteger createInteger(int p, int new_p) {
|
525
500
|
Ruby runtime = getRuntime();
|
526
501
|
ByteList num = absSubSequence(p, new_p);
|
527
502
|
return bytesToInum(runtime, num);
|
528
503
|
}
|
529
|
-
|
504
|
+
|
530
505
|
RubyInteger bytesToInum(Ruby runtime, ByteList num) {
|
531
506
|
return runtime.is1_9() ?
|
532
507
|
ConvertBytes.byteListToInum19(runtime, num, 10, true) :
|
@@ -556,7 +531,9 @@ public class Parser extends RubyObject {
|
|
556
531
|
res.update(null, p);
|
557
532
|
return;
|
558
533
|
}
|
559
|
-
|
534
|
+
IRubyObject number = parser.decimalClass == null ?
|
535
|
+
createFloat(p, new_p) : createCustomDecimal(p, new_p);
|
536
|
+
|
560
537
|
res.update(number, new_p + 1);
|
561
538
|
return;
|
562
539
|
}
|
@@ -571,16 +548,23 @@ public class Parser extends RubyObject {
|
|
571
548
|
if (cs < JSON_float_first_final) {
|
572
549
|
return -1;
|
573
550
|
}
|
574
|
-
|
551
|
+
|
575
552
|
return p;
|
576
553
|
}
|
577
|
-
|
554
|
+
|
578
555
|
RubyFloat createFloat(int p, int new_p) {
|
579
556
|
Ruby runtime = getRuntime();
|
580
557
|
ByteList num = absSubSequence(p, new_p);
|
581
558
|
return RubyFloat.newFloat(runtime, dc.parse(num, true, runtime.is1_9()));
|
582
559
|
}
|
583
560
|
|
561
|
+
IRubyObject createCustomDecimal(int p, int new_p) {
|
562
|
+
Ruby runtime = getRuntime();
|
563
|
+
ByteList num = absSubSequence(p, new_p);
|
564
|
+
IRubyObject numString = runtime.newString(num.toString());
|
565
|
+
return parser.decimalClass.callMethod(context, "new", numString);
|
566
|
+
}
|
567
|
+
|
584
568
|
%%{
|
585
569
|
machine JSON_string;
|
586
570
|
include JSON_common;
|
@@ -623,11 +607,11 @@ public class Parser extends RubyObject {
|
|
623
607
|
%% write exec;
|
624
608
|
|
625
609
|
if (parser.createAdditions) {
|
626
|
-
RubyHash
|
627
|
-
if (
|
610
|
+
RubyHash matchString = parser.match_string;
|
611
|
+
if (matchString != null) {
|
628
612
|
final IRubyObject[] memoArray = { result, null };
|
629
613
|
try {
|
630
|
-
|
614
|
+
matchString.visitAll(new RubyHash.Visitor() {
|
631
615
|
@Override
|
632
616
|
public void visit(IRubyObject pattern, IRubyObject klass) {
|
633
617
|
if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
|
@@ -647,8 +631,8 @@ public class Parser extends RubyObject {
|
|
647
631
|
}
|
648
632
|
}
|
649
633
|
|
650
|
-
if (cs >= JSON_string_first_final && result != null) {
|
651
|
-
if (
|
634
|
+
if (cs >= JSON_string_first_final && result != null) {
|
635
|
+
if (result instanceof RubyString) {
|
652
636
|
((RubyString)result).force_encoding(context, info.utf8.get());
|
653
637
|
}
|
654
638
|
res.update(result, p + 1);
|
@@ -765,7 +749,7 @@ public class Parser extends RubyObject {
|
|
765
749
|
fhold;
|
766
750
|
fbreak;
|
767
751
|
}
|
768
|
-
|
752
|
+
|
769
753
|
pair = ignore* begin_name >parse_name ignore* name_separator
|
770
754
|
ignore* begin_value >parse_value;
|
771
755
|
next_pair = ignore* value_separator pair;
|
@@ -835,60 +819,6 @@ public class Parser extends RubyObject {
|
|
835
819
|
|
836
820
|
write data;
|
837
821
|
|
838
|
-
action parse_object {
|
839
|
-
currentNesting = 1;
|
840
|
-
parseObject(res, fpc, pe);
|
841
|
-
if (res.result == null) {
|
842
|
-
fhold;
|
843
|
-
fbreak;
|
844
|
-
} else {
|
845
|
-
result = res.result;
|
846
|
-
fexec res.p;
|
847
|
-
}
|
848
|
-
}
|
849
|
-
|
850
|
-
action parse_array {
|
851
|
-
currentNesting = 1;
|
852
|
-
parseArray(res, fpc, pe);
|
853
|
-
if (res.result == null) {
|
854
|
-
fhold;
|
855
|
-
fbreak;
|
856
|
-
} else {
|
857
|
-
result = res.result;
|
858
|
-
fexec res.p;
|
859
|
-
}
|
860
|
-
}
|
861
|
-
|
862
|
-
main := ignore*
|
863
|
-
( begin_object >parse_object
|
864
|
-
| begin_array >parse_array )
|
865
|
-
ignore*;
|
866
|
-
}%%
|
867
|
-
|
868
|
-
public IRubyObject parseStrict() {
|
869
|
-
int cs = EVIL;
|
870
|
-
int p, pe;
|
871
|
-
IRubyObject result = null;
|
872
|
-
ParserResult res = new ParserResult();
|
873
|
-
|
874
|
-
%% write init;
|
875
|
-
p = byteList.begin();
|
876
|
-
pe = p + byteList.length();
|
877
|
-
%% write exec;
|
878
|
-
|
879
|
-
if (cs >= JSON_first_final && p == pe) {
|
880
|
-
return result;
|
881
|
-
} else {
|
882
|
-
throw unexpectedToken(p, pe);
|
883
|
-
}
|
884
|
-
}
|
885
|
-
|
886
|
-
%%{
|
887
|
-
machine JSON_quirks_mode;
|
888
|
-
include JSON_common;
|
889
|
-
|
890
|
-
write data;
|
891
|
-
|
892
822
|
action parse_value {
|
893
823
|
parseValue(res, fpc, pe);
|
894
824
|
if (res.result == null) {
|
@@ -905,7 +835,7 @@ public class Parser extends RubyObject {
|
|
905
835
|
ignore*;
|
906
836
|
}%%
|
907
837
|
|
908
|
-
public IRubyObject
|
838
|
+
public IRubyObject parseImplemetation() {
|
909
839
|
int cs = EVIL;
|
910
840
|
int p, pe;
|
911
841
|
IRubyObject result = null;
|
@@ -916,7 +846,7 @@ public class Parser extends RubyObject {
|
|
916
846
|
pe = p + byteList.length();
|
917
847
|
%% write exec;
|
918
848
|
|
919
|
-
if (cs >=
|
849
|
+
if (cs >= JSON_first_final && p == pe) {
|
920
850
|
return result;
|
921
851
|
} else {
|
922
852
|
throw unexpectedToken(p, pe);
|
@@ -924,12 +854,7 @@ public class Parser extends RubyObject {
|
|
924
854
|
}
|
925
855
|
|
926
856
|
public IRubyObject parse() {
|
927
|
-
|
928
|
-
return parseQuirksMode();
|
929
|
-
} else {
|
930
|
-
return parseStrict();
|
931
|
-
}
|
932
|
-
|
857
|
+
return parseImplemetation();
|
933
858
|
}
|
934
859
|
|
935
860
|
/**
|
@@ -90,10 +90,6 @@ final class RuntimeInfo {
|
|
90
90
|
}
|
91
91
|
}
|
92
92
|
|
93
|
-
public boolean encodingsSupported() {
|
94
|
-
return utf8 != null && utf8.get() != null;
|
95
|
-
}
|
96
|
-
|
97
93
|
public RubyEncoding getEncoding(ThreadContext context, String name) {
|
98
94
|
synchronized (encodings) {
|
99
95
|
WeakReference<RubyEncoding> encoding = encodings.get(name);
|
data/json-java.gemspec
CHANGED
@@ -8,9 +8,8 @@ spec = Gem::Specification.new do |s|
|
|
8
8
|
s.description = "A JSON implementation as a JRuby extension."
|
9
9
|
s.author = "Daniel Luz"
|
10
10
|
s.email = "dev+ruby@mernen.com"
|
11
|
-
s.homepage = "http://
|
11
|
+
s.homepage = "http://flori.github.com/json"
|
12
12
|
s.platform = 'java'
|
13
|
-
s.rubyforge_project = "json-jruby"
|
14
13
|
s.licenses = ["Ruby"]
|
15
14
|
|
16
15
|
s.files = Dir["{docs,lib,tests}/**/*"]
|
data/json.gemspec
CHANGED
Binary file
|
data/json_pure.gemspec
CHANGED
@@ -1,24 +1,25 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: json_pure
|
2
|
+
# stub: json_pure 2.3.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "json_pure".freeze
|
6
|
-
s.version = "
|
6
|
+
s.version = "2.3.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Florian Frank".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2019-12-11"
|
12
12
|
s.description = "This is a JSON implementation in pure Ruby.".freeze
|
13
13
|
s.email = "flori@ping.de".freeze
|
14
14
|
s.extra_rdoc_files = ["README.md".freeze]
|
15
|
-
s.files = ["./tests/
|
15
|
+
s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES.md".freeze, "Gemfile".freeze, "LICENSE".freeze, "README-json-jruby.md".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "diagrams/.keep".freeze, "ext/json/ext/fbuffer/fbuffer.h".freeze, "ext/json/ext/generator/depend".freeze, "ext/json/ext/generator/extconf.rb".freeze, "ext/json/ext/generator/generator.c".freeze, "ext/json/ext/generator/generator.h".freeze, "ext/json/ext/parser/depend".freeze, "ext/json/ext/parser/extconf.rb".freeze, "ext/json/ext/parser/parser.c".freeze, "ext/json/ext/parser/parser.h".freeze, "ext/json/ext/parser/parser.rl".freeze, "ext/json/extconf.rb".freeze, "install.rb".freeze, "java/src/json/ext/ByteListTranscoder.java".freeze, "java/src/json/ext/Generator.java".freeze, "java/src/json/ext/GeneratorMethods.java".freeze, "java/src/json/ext/GeneratorService.java".freeze, "java/src/json/ext/GeneratorState.java".freeze, "java/src/json/ext/OptionsReader.java".freeze, "java/src/json/ext/Parser.java".freeze, "java/src/json/ext/Parser.rl".freeze, "java/src/json/ext/ParserService.java".freeze, "java/src/json/ext/RuntimeInfo.java".freeze, "java/src/json/ext/StringDecoder.java".freeze, "java/src/json/ext/StringEncoder.java".freeze, "java/src/json/ext/Utils.java".freeze, "json-java.gemspec".freeze, "json.gemspec".freeze, "json_pure.gemspec".freeze, "lib/json.rb".freeze, "lib/json/add/bigdecimal.rb".freeze, "lib/json/add/complex.rb".freeze, "lib/json/add/core.rb".freeze, "lib/json/add/date.rb".freeze, "lib/json/add/date_time.rb".freeze, "lib/json/add/exception.rb".freeze, "lib/json/add/ostruct.rb".freeze, "lib/json/add/range.rb".freeze, "lib/json/add/rational.rb".freeze, "lib/json/add/regexp.rb".freeze, "lib/json/add/set.rb".freeze, "lib/json/add/struct.rb".freeze, "lib/json/add/symbol.rb".freeze, "lib/json/add/time.rb".freeze, "lib/json/common.rb".freeze, "lib/json/ext.rb".freeze, "lib/json/ext/.keep".freeze, "lib/json/generic_object.rb".freeze, "lib/json/pure.rb".freeze, "lib/json/pure/generator.rb".freeze, "lib/json/pure/parser.rb".freeze, "lib/json/version.rb".freeze, "references/rfc7159.txt".freeze, "tests/fixtures/fail10.json".freeze, "tests/fixtures/fail11.json".freeze, "tests/fixtures/fail12.json".freeze, "tests/fixtures/fail13.json".freeze, "tests/fixtures/fail14.json".freeze, "tests/fixtures/fail18.json".freeze, "tests/fixtures/fail19.json".freeze, "tests/fixtures/fail2.json".freeze, "tests/fixtures/fail20.json".freeze, "tests/fixtures/fail21.json".freeze, "tests/fixtures/fail22.json".freeze, "tests/fixtures/fail23.json".freeze, "tests/fixtures/fail24.json".freeze, "tests/fixtures/fail25.json".freeze, "tests/fixtures/fail27.json".freeze, "tests/fixtures/fail28.json".freeze, "tests/fixtures/fail3.json".freeze, "tests/fixtures/fail4.json".freeze, "tests/fixtures/fail5.json".freeze, "tests/fixtures/fail6.json".freeze, "tests/fixtures/fail7.json".freeze, "tests/fixtures/fail8.json".freeze, "tests/fixtures/fail9.json".freeze, "tests/fixtures/obsolete_fail1.json".freeze, "tests/fixtures/pass1.json".freeze, "tests/fixtures/pass15.json".freeze, "tests/fixtures/pass16.json".freeze, "tests/fixtures/pass17.json".freeze, "tests/fixtures/pass2.json".freeze, "tests/fixtures/pass26.json".freeze, "tests/fixtures/pass3.json".freeze, "tests/json_addition_test.rb".freeze, "tests/json_common_interface_test.rb".freeze, "tests/json_encoding_test.rb".freeze, "tests/json_ext_parser_test.rb".freeze, "tests/json_fixtures_test.rb".freeze, "tests/json_generator_test.rb".freeze, "tests/json_generic_object_test.rb".freeze, "tests/json_parser_test.rb".freeze, "tests/json_string_matching_test.rb".freeze, "tests/test_helper.rb".freeze, "tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
|
16
16
|
s.homepage = "http://flori.github.com/json".freeze
|
17
17
|
s.licenses = ["Ruby".freeze]
|
18
|
-
s.rdoc_options = ["--title".freeze, "JSON implemention for
|
19
|
-
s.
|
18
|
+
s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze, "--main".freeze, "README.md".freeze]
|
19
|
+
s.required_ruby_version = Gem::Requirement.new(">= 1.9".freeze)
|
20
|
+
s.rubygems_version = "3.0.3".freeze
|
20
21
|
s.summary = "JSON Implementation for Ruby".freeze
|
21
|
-
s.test_files = ["./tests/
|
22
|
+
s.test_files = ["./tests/test_helper.rb".freeze]
|
22
23
|
|
23
24
|
if s.respond_to? :specification_version then
|
24
25
|
s.specification_version = 4
|
data/lib/json.rb
CHANGED
data/lib/json/add/bigdecimal.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#frozen_string_literal: false
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
3
|
require 'json'
|
3
4
|
end
|
@@ -22,7 +23,7 @@ class BigDecimal
|
|
22
23
|
end
|
23
24
|
|
24
25
|
# return the JSON value
|
25
|
-
def to_json(*)
|
26
|
-
as_json.to_json
|
26
|
+
def to_json(*args)
|
27
|
+
as_json.to_json(*args)
|
27
28
|
end
|
28
29
|
end
|
data/lib/json/add/complex.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
#frozen_string_literal: false
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
3
|
require 'json'
|
3
4
|
end
|
@@ -22,7 +23,7 @@ class Complex
|
|
22
23
|
end
|
23
24
|
|
24
25
|
# Stores class name (Complex) along with real value <tt>r</tt> and imaginary value <tt>i</tt> as JSON string
|
25
|
-
def to_json(*)
|
26
|
-
as_json.to_json
|
26
|
+
def to_json(*args)
|
27
|
+
as_json.to_json(*args)
|
27
28
|
end
|
28
|
-
end
|
29
|
+
end
|
data/lib/json/add/core.rb
CHANGED
data/lib/json/add/date.rb
CHANGED
data/lib/json/add/date_time.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
|
+
#frozen_string_literal: false
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
3
|
require 'json'
|
3
4
|
end
|
4
5
|
require 'date'
|
5
6
|
|
6
|
-
# DateTime serialization/deserialization
|
7
7
|
class DateTime
|
8
8
|
|
9
9
|
# Deserializes JSON string by converting year <tt>y</tt>, month <tt>m</tt>,
|
data/lib/json/add/exception.rb
CHANGED
data/lib/json/add/ostruct.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
+
#frozen_string_literal: false
|
1
2
|
unless defined?(::JSON::JSON_LOADED) and ::JSON::JSON_LOADED
|
2
3
|
require 'json'
|
3
4
|
end
|
4
5
|
require 'ostruct'
|
5
6
|
|
6
|
-
# OpenStruct serialization/deserialization
|
7
7
|
class OpenStruct
|
8
8
|
|
9
9
|
# Deserializes JSON string by constructing new Struct object with values
|
10
|
-
# <tt>
|
10
|
+
# <tt>t</tt> serialized by <tt>to_json</tt>.
|
11
11
|
def self.json_create(object)
|
12
12
|
new(object['t'] || object[:t])
|
13
13
|
end
|
@@ -23,7 +23,7 @@ class OpenStruct
|
|
23
23
|
}
|
24
24
|
end
|
25
25
|
|
26
|
-
# Stores class name (OpenStruct) with this struct's values <tt>
|
26
|
+
# Stores class name (OpenStruct) with this struct's values <tt>t</tt> as a
|
27
27
|
# JSON string.
|
28
28
|
def to_json(*args)
|
29
29
|
as_json.to_json(*args)
|