json 1.8.6 → 2.0.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.

Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +0 -1
  3. data/.travis.yml +5 -3
  4. data/CHANGES +5 -5
  5. data/Gemfile +3 -1
  6. data/README.md +131 -84
  7. data/Rakefile +17 -10
  8. data/VERSION +1 -1
  9. data/ext/json/ext/generator/generator.c +1 -52
  10. data/ext/json/ext/generator/generator.h +0 -5
  11. data/ext/json/ext/parser/extconf.rb +3 -0
  12. data/ext/json/ext/parser/parser.c +304 -458
  13. data/ext/json/ext/parser/parser.h +0 -1
  14. data/ext/json/ext/parser/parser.rl +35 -152
  15. data/ext/json/extconf.rb +0 -1
  16. data/java/src/json/ext/Generator.java +2 -5
  17. data/java/src/json/ext/GeneratorState.java +2 -54
  18. data/java/src/json/ext/OptionsReader.java +1 -1
  19. data/java/src/json/ext/Parser.java +109 -409
  20. data/java/src/json/ext/Parser.rl +24 -117
  21. data/java/src/json/ext/RuntimeInfo.java +0 -4
  22. data/json.gemspec +0 -0
  23. data/json_pure.gemspec +7 -7
  24. data/lib/json.rb +1 -0
  25. data/lib/json/add/bigdecimal.rb +1 -0
  26. data/lib/json/add/complex.rb +2 -1
  27. data/lib/json/add/core.rb +1 -0
  28. data/lib/json/add/date.rb +1 -1
  29. data/lib/json/add/date_time.rb +1 -1
  30. data/lib/json/add/exception.rb +1 -1
  31. data/lib/json/add/ostruct.rb +1 -1
  32. data/lib/json/add/range.rb +1 -1
  33. data/lib/json/add/rational.rb +1 -0
  34. data/lib/json/add/regexp.rb +1 -1
  35. data/lib/json/add/struct.rb +1 -1
  36. data/lib/json/add/symbol.rb +1 -1
  37. data/lib/json/add/time.rb +1 -1
  38. data/lib/json/common.rb +24 -52
  39. data/lib/json/ext.rb +0 -6
  40. data/lib/json/generic_object.rb +5 -4
  41. data/lib/json/pure.rb +2 -8
  42. data/lib/json/pure/generator.rb +51 -123
  43. data/lib/json/pure/parser.rb +28 -80
  44. data/lib/json/version.rb +2 -1
  45. data/references/rfc7159.txt +899 -0
  46. data/tests/fixtures/obsolete_fail1.json +1 -0
  47. data/tests/{test_json_addition.rb → json_addition_test.rb} +22 -25
  48. data/tests/json_common_interface_test.rb +126 -0
  49. data/tests/json_encoding_test.rb +105 -0
  50. data/tests/json_ext_parser_test.rb +15 -0
  51. data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
  52. data/tests/{test_json_generate.rb → json_generator_test.rb} +65 -37
  53. data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
  54. data/tests/json_parser_test.rb +448 -0
  55. data/tests/json_string_matching_test.rb +38 -0
  56. data/tests/test_helper.rb +23 -0
  57. data/tools/fuzz.rb +1 -9
  58. metadata +19 -32
  59. data/TODO +0 -1
  60. data/tests/fixtures/fail1.json +0 -1
  61. data/tests/setup_variant.rb +0 -11
  62. data/tests/test_json.rb +0 -519
  63. data/tests/test_json_encoding.rb +0 -65
  64. data/tests/test_json_string_matching.rb +0 -39
  65. data/tests/test_json_unicode.rb +0 -72
@@ -50,10 +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;
56
- private RubyHash match_string;
55
+ private RubyHash matchString;
57
56
 
58
57
  private static final int DEFAULT_MAX_NESTING = 100;
59
58
 
@@ -121,10 +120,6 @@ public class Parser extends RubyObject {
121
120
  * <dd>If set to <code>true</code>, returns symbols for the names (keys) in
122
121
  * a JSON object. Otherwise strings are returned, which is also the default.
123
122
  *
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
123
  * <dt><code>:create_additions</code>
129
124
  * <dd>If set to <code>false</code>, the Parser doesn't create additions
130
125
  * even if a matching class and <code>create_id</code> was found. This option
@@ -136,9 +131,6 @@ public class Parser extends RubyObject {
136
131
  * <dt><code>:array_class</code>
137
132
  * <dd>Defaults to Array.
138
133
  *
139
- * <dt><code>:quirks_mode</code>
140
- * <dd>Enables quirks_mode for parser, that is for example parsing single
141
- * JSON values instead of documents is possible.
142
134
  * </dl>
143
135
  */
144
136
  @JRubyMethod(name = "new", required = 1, optional = 1, meta = true)
@@ -161,15 +153,20 @@ public class Parser extends RubyObject {
161
153
  this.maxNesting = opts.getInt("max_nesting", DEFAULT_MAX_NESTING);
162
154
  this.allowNaN = opts.getBool("allow_nan", false);
163
155
  this.symbolizeNames = opts.getBool("symbolize_names", false);
164
- this.quirksMode = opts.getBool("quirks_mode", false);
165
156
  this.createId = opts.getString("create_id", getCreateId(context));
166
157
  this.createAdditions = opts.getBool("create_additions", false);
167
158
  this.objectClass = opts.getClass("object_class", runtime.getHash());
168
159
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
169
- this.match_string = opts.getHash("match_string");
160
+ this.matchString = opts.getHash("match_string");
170
161
 
162
+ if(symbolizeNames && createAdditions) {
163
+ throw runtime.newArgumentError(
164
+ "options :symbolize_names and :create_additions cannot be " +
165
+ " used in conjunction"
166
+ );
167
+ }
171
168
  this.vSource = args[0].convertToString();
172
- if (!quirksMode) this.vSource = convertEncoding(context, vSource);
169
+ this.vSource = convertEncoding(context, vSource);
173
170
 
174
171
  return this;
175
172
  }
@@ -180,33 +177,13 @@ public class Parser extends RubyObject {
180
177
  * Returns the source string if no conversion is needed.
181
178
  */
182
179
  private RubyString convertEncoding(ThreadContext context, RubyString source) {
183
- ByteList bl = source.getByteList();
184
- int len = bl.length();
185
- if (len < 2) {
186
- throw Utils.newException(context, Utils.M_PARSER_ERROR,
187
- "A JSON text must at least contain two octets!");
188
- }
189
-
190
- if (info.encodingsSupported()) {
191
- RubyEncoding encoding = (RubyEncoding)source.encoding(context);
192
- if (encoding != info.ascii8bit.get()) {
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});
180
+ RubyEncoding encoding = (RubyEncoding)source.encoding(context);
181
+ if (encoding == info.ascii8bit.get()) {
182
+ source.force_encoding(context, info.utf8.get());
183
+ } else {
184
+ source = (RubyString) source.encode(context, info.utf8.get());
185
+ }
186
+ return source;
210
187
  }
211
188
 
212
189
  /**
@@ -259,17 +236,6 @@ public class Parser extends RubyObject {
259
236
  return checkAndGetSource().dup();
260
237
  }
261
238
 
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
239
  public RubyString checkAndGetSource() {
274
240
  if (vSource != null) {
275
241
  return vSource;
@@ -393,7 +359,7 @@ public class Parser extends RubyObject {
393
359
  }
394
360
  }
395
361
  action parse_number {
396
- if (pe > fpc + 9 - (parser.quirksMode ? 1 : 0) &&
362
+ if (pe > fpc + 8 &&
397
363
  absSubSequence(fpc, fpc + 9).equals(JSON_MINUS_INFINITY)) {
398
364
 
399
365
  if (parser.allowNaN) {
@@ -623,11 +589,11 @@ public class Parser extends RubyObject {
623
589
  %% write exec;
624
590
 
625
591
  if (parser.createAdditions) {
626
- RubyHash match_string = parser.match_string;
627
- if (match_string != null) {
592
+ RubyHash matchString = parser.matchString;
593
+ if (matchString != null) {
628
594
  final IRubyObject[] memoArray = { result, null };
629
595
  try {
630
- match_string.visitAll(new RubyHash.Visitor() {
596
+ matchString.visitAll(new RubyHash.Visitor() {
631
597
  @Override
632
598
  public void visit(IRubyObject pattern, IRubyObject klass) {
633
599
  if (pattern.callMethod(context, "===", memoArray[0]).isTrue()) {
@@ -648,7 +614,7 @@ public class Parser extends RubyObject {
648
614
  }
649
615
 
650
616
  if (cs >= JSON_string_first_final && result != null) {
651
- if (info.encodingsSupported() && result instanceof RubyString) {
617
+ if (result instanceof RubyString) {
652
618
  ((RubyString)result).force_encoding(context, info.utf8.get());
653
619
  }
654
620
  res.update(result, p + 1);
@@ -835,60 +801,6 @@ public class Parser extends RubyObject {
835
801
 
836
802
  write data;
837
803
 
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
804
  action parse_value {
893
805
  parseValue(res, fpc, pe);
894
806
  if (res.result == null) {
@@ -905,7 +817,7 @@ public class Parser extends RubyObject {
905
817
  ignore*;
906
818
  }%%
907
819
 
908
- public IRubyObject parseQuirksMode() {
820
+ public IRubyObject parseImplemetation() {
909
821
  int cs = EVIL;
910
822
  int p, pe;
911
823
  IRubyObject result = null;
@@ -916,7 +828,7 @@ public class Parser extends RubyObject {
916
828
  pe = p + byteList.length();
917
829
  %% write exec;
918
830
 
919
- if (cs >= JSON_quirks_mode_first_final && p == pe) {
831
+ if (cs >= JSON_first_final && p == pe) {
920
832
  return result;
921
833
  } else {
922
834
  throw unexpectedToken(p, pe);
@@ -924,12 +836,7 @@ public class Parser extends RubyObject {
924
836
  }
925
837
 
926
838
  public IRubyObject parse() {
927
- if (parser.quirksMode) {
928
- return parseQuirksMode();
929
- } else {
930
- return parseStrict();
931
- }
932
-
839
+ return parseImplemetation();
933
840
  }
934
841
 
935
842
  /**
@@ -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);
Binary file
@@ -1,24 +1,24 @@
1
1
  # -*- encoding: utf-8 -*-
2
- # stub: json_pure 1.8.6 ruby lib
2
+ # stub: json_pure 2.0.0 ruby lib
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "json_pure".freeze
6
- s.version = "1.8.6"
6
+ s.version = "2.0.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 = "2017-01-13"
11
+ s.date = "2016-07-01"
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/test_json.rb".freeze, "./tests/test_json_addition.rb".freeze, "./tests/test_json_encoding.rb".freeze, "./tests/test_json_fixtures.rb".freeze, "./tests/test_json_generate.rb".freeze, "./tests/test_json_generic_object.rb".freeze, "./tests/test_json_string_matching.rb".freeze, "./tests/test_json_unicode.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES".freeze, "Gemfile".freeze, "README-json-jruby.markdown".freeze, "README.md".freeze, "Rakefile".freeze, "TODO".freeze, "VERSION".freeze, "data/example.json".freeze, "data/index.html".freeze, "data/prototype.js".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/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, "tests/fixtures/fail1.json".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/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/setup_variant.rb".freeze, "tests/test_json.rb".freeze, "tests/test_json_addition.rb".freeze, "tests/test_json_encoding.rb".freeze, "tests/test_json_fixtures.rb".freeze, "tests/test_json_generate.rb".freeze, "tests/test_json_generic_object.rb".freeze, "tests/test_json_string_matching.rb".freeze, "tests/test_json_unicode.rb".freeze, "tools/diff.sh".freeze, "tools/fuzz.rb".freeze, "tools/server.rb".freeze]
15
+ s.files = ["./tests/test_helper.rb".freeze, ".gitignore".freeze, ".travis.yml".freeze, "CHANGES".freeze, "Gemfile".freeze, "README-json-jruby.markdown".freeze, "README.md".freeze, "Rakefile".freeze, "VERSION".freeze, "data/example.json".freeze, "data/index.html".freeze, "data/prototype.js".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/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 Ruby".freeze, "--main".freeze, "README.md".freeze]
19
- s.rubygems_version = "2.6.8".freeze
18
+ s.rdoc_options = ["--title".freeze, "JSON implemention for ruby".freeze, "--main".freeze, "README.md".freeze]
19
+ s.rubygems_version = "2.6.4".freeze
20
20
  s.summary = "JSON Implementation for Ruby".freeze
21
- s.test_files = ["./tests/test_json.rb".freeze, "./tests/test_json_addition.rb".freeze, "./tests/test_json_encoding.rb".freeze, "./tests/test_json_fixtures.rb".freeze, "./tests/test_json_generate.rb".freeze, "./tests/test_json_generic_object.rb".freeze, "./tests/test_json_string_matching.rb".freeze, "./tests/test_json_unicode.rb".freeze]
21
+ s.test_files = ["./tests/test_helper.rb".freeze]
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  s.specification_version = 4
@@ -1,3 +1,4 @@
1
+ #frozen_string_literal: false
1
2
  require 'json/common'
2
3
 
3
4
  ##
@@ -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
@@ -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
@@ -25,4 +26,4 @@ class Complex
25
26
  def to_json(*)
26
27
  as_json.to_json
27
28
  end
28
- end
29
+ end
@@ -1,3 +1,4 @@
1
+ #frozen_string_literal: false
1
2
  # This file requires the implementations of ruby core's custom objects for
2
3
  # serialisation/deserialisation.
3
4
 
@@ -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
- # Date serialization/deserialization
7
7
  class Date
8
8
 
9
9
  # Deserializes JSON string by converting Julian year <tt>y</tt>, month
@@ -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>,
@@ -1,8 +1,8 @@
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
 
5
- # Exception serialization/deserialization
6
6
  class Exception
7
7
 
8
8
  # Deserializes JSON string by constructing new Exception object with message
@@ -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 '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
@@ -1,8 +1,8 @@
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
 
5
- # Range serialization/deserialization
6
6
  class Range
7
7
 
8
8
  # Deserializes JSON string by constructing new Range object with arguments
@@ -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
@@ -1,8 +1,8 @@
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
 
5
- # Regexp serialization/deserialization
6
6
  class Regexp
7
7
 
8
8
  # Deserializes JSON string by constructing new Regexp object with source
@@ -1,8 +1,8 @@
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
 
5
- # Struct serialization/deserialization
6
6
  class Struct
7
7
 
8
8
  # Deserializes JSON string by constructing new Struct object with values
@@ -1,8 +1,8 @@
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
 
5
- # Symbol serialization/deserialization
6
6
  class Symbol
7
7
  # Returns a hash, that will be turned into a JSON object and represent this
8
8
  # object.
@@ -1,8 +1,8 @@
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
 
5
- # Time serialization/deserialization
6
6
  class Time
7
7
 
8
8
  # Deserializes JSON string by converting time since epoch to Time
@@ -1,14 +1,15 @@
1
+ #frozen_string_literal: false
1
2
  require 'json/version'
2
3
  require 'json/generic_object'
3
4
 
4
5
  module JSON
5
6
  class << self
6
- # If _object_ is string-like, parse the string and return the parsed result
7
- # as a Ruby data structure. Otherwise generate a JSON text from the Ruby
8
- # data structure object and return it.
7
+ # If _object_ is string-like, parse the string and return the parsed
8
+ # result as a Ruby data structure. Otherwise generate a JSON text from the
9
+ # Ruby data structure object and return it.
9
10
  #
10
- # The _opts_ argument is passed through to generate/parse respectively. See
11
- # generate and parse for their documentation.
11
+ # The _opts_ argument is passed through to generate/parse respectively.
12
+ # See generate and parse for their documentation.
12
13
  def [](object, opts = {})
13
14
  if object.respond_to? :to_str
14
15
  JSON.parse(object.to_str, opts)
@@ -24,7 +25,7 @@ module JSON
24
25
  # Set the JSON parser class _parser_ to be used by JSON.
25
26
  def parser=(parser) # :nodoc:
26
27
  @parser = parser
27
- remove_const :Parser if JSON.const_defined_in?(self, :Parser)
28
+ remove_const :Parser if const_defined?(:Parser, true)
28
29
  const_set :Parser, parser
29
30
  end
30
31
 
@@ -35,8 +36,8 @@ module JSON
35
36
  def deep_const_get(path) # :nodoc:
36
37
  path.to_s.split(/::/).inject(Object) do |p, c|
37
38
  case
38
- when c.empty? then p
39
- when JSON.const_defined_in?(p, c) then p.const_get(c)
39
+ when c.empty? then p
40
+ when p.const_defined?(c, true) then p.const_get(c)
40
41
  else
41
42
  begin
42
43
  p.const_missing(c)
@@ -138,10 +139,10 @@ module JSON
138
139
  # _opts_ can have the following
139
140
  # keys:
140
141
  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
141
- # structures. Disable depth checking with :max_nesting => false. It defaults
142
- # to 100.
142
+ # structures. Disable depth checking with :max_nesting => false. It
143
+ # defaults to 100.
143
144
  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
144
- # defiance of RFC 4627 to be parsed by the Parser. This option defaults
145
+ # defiance of RFC 7159 to be parsed by the Parser. This option defaults
145
146
  # to false.
146
147
  # * *symbolize_names*: If set to true, returns symbols for the names
147
148
  # (keys) in a JSON object. Otherwise strings are returned. Strings are
@@ -161,11 +162,11 @@ module JSON
161
162
  #
162
163
  # _opts_ can have the following keys:
163
164
  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
164
- # structures. Enable depth checking with :max_nesting => anInteger. The parse!
165
- # methods defaults to not doing max depth checking: This can be dangerous
166
- # if someone wants to fill up your stack.
165
+ # structures. Enable depth checking with :max_nesting => anInteger. The
166
+ # parse! methods defaults to not doing max depth checking: This can be
167
+ # dangerous if someone wants to fill up your stack.
167
168
  # * *allow_nan*: If set to true, allow NaN, Infinity, and -Infinity in
168
- # defiance of RFC 4627 to be parsed by the Parser. This option defaults
169
+ # defiance of RFC 7159 to be parsed by the Parser. This option defaults
169
170
  # to true.
170
171
  # * *create_additions*: If set to false, the Parser doesn't create
171
172
  # additions even if a matching class and create_id was found. This option
@@ -174,7 +175,7 @@ module JSON
174
175
  opts = {
175
176
  :max_nesting => false,
176
177
  :allow_nan => true
177
- }.update(opts)
178
+ }.merge(opts)
178
179
  Parser.new(source, opts).parse
179
180
  end
180
181
 
@@ -295,13 +296,13 @@ module JSON
295
296
  # The global default options for the JSON.load method:
296
297
  # :max_nesting: false
297
298
  # :allow_nan: true
298
- # :quirks_mode: true
299
+ # :allow_blank: true
299
300
  attr_accessor :load_default_options
300
301
  end
301
302
  self.load_default_options = {
302
303
  :max_nesting => false,
303
304
  :allow_nan => true,
304
- :quirks_mode => true,
305
+ :allow_blank => true,
305
306
  :create_additions => true,
306
307
  }
307
308
 
@@ -328,7 +329,7 @@ module JSON
328
329
  elsif source.respond_to?(:read)
329
330
  source = source.read
330
331
  end
331
- if opts[:quirks_mode] && (source.nil? || source.empty?)
332
+ if opts[:allow_blank] && (source.nil? || source.empty?)
332
333
  source = 'null'
333
334
  end
334
335
  result = parse(source, opts)
@@ -357,13 +358,12 @@ module JSON
357
358
  # The global default options for the JSON.dump method:
358
359
  # :max_nesting: false
359
360
  # :allow_nan: true
360
- # :quirks_mode: true
361
+ # :allow_blank: true
361
362
  attr_accessor :dump_default_options
362
363
  end
363
364
  self.dump_default_options = {
364
365
  :max_nesting => false,
365
366
  :allow_nan => true,
366
- :quirks_mode => true,
367
367
  }
368
368
 
369
369
  # Dumps _obj_ as a JSON string, i.e. calls generate on the object and returns
@@ -402,37 +402,9 @@ module JSON
402
402
  raise ArgumentError, "exceed depth limit"
403
403
  end
404
404
 
405
- # Swap consecutive bytes of _string_ in place.
406
- def self.swap!(string) # :nodoc:
407
- 0.upto(string.size / 2) do |i|
408
- break unless string[2 * i + 1]
409
- string[2 * i], string[2 * i + 1] = string[2 * i + 1], string[2 * i]
410
- end
411
- string
412
- end
413
-
414
- # Shortcut for iconv.
415
- if ::String.method_defined?(:encode)
416
- # Encodes string using Ruby's _String.encode_
417
- def self.iconv(to, from, string)
418
- string.encode(to, from)
419
- end
420
- else
421
- require 'iconv'
422
- # Encodes string using _iconv_ library
423
- def self.iconv(to, from, string)
424
- Iconv.conv(to, from, string)
425
- end
426
- end
427
-
428
- if ::Object.method(:const_defined?).arity == 1
429
- def self.const_defined_in?(modul, constant)
430
- modul.const_defined?(constant)
431
- end
432
- else
433
- def self.const_defined_in?(modul, constant)
434
- modul.const_defined?(constant, false)
435
- end
405
+ # Encodes string using Ruby's _String.encode_
406
+ def self.iconv(to, from, string)
407
+ string.encode(to, from)
436
408
  end
437
409
  end
438
410