json_pure 1.8.6 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
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 +18 -31
  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