json_pure 1.7.5 → 1.7.6

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml CHANGED
@@ -3,15 +3,17 @@ bundler_args: --binstubs
3
3
 
4
4
  # Specify which ruby versions you wish to run your tests on, each version will be used
5
5
  rvm:
6
- - 1.8.6
7
6
  - 1.8.7
8
7
  - 1.9.2
9
8
  - 1.9.3
9
+ - ree
10
10
  - rbx-18mode
11
11
  - rbx-19mode
12
- - ree
13
12
  - jruby-18mode
14
13
  - jruby-19mode
15
14
  - ruby-head
16
-
15
+ matrix:
16
+ allow_failures:
17
+ - rvm: rbx-18mode
18
+ - rvm: rbx-19mode
17
19
  script: "bundle exec rake"
data/CHANGES CHANGED
@@ -1,3 +1,7 @@
1
+ 2012-11-29 (1.7.6)
2
+ * Add GeneratorState#merge alias for JRuby, fix state accessor methods. Thx to
3
+ jvshahid@github.
4
+ * Increase hash likeness of state objects.
1
5
  2012-08-17 (1.7.5)
2
6
  * Fix compilation of extension on older rubies.
3
7
  2012-07-26 (1.7.4)
data/Gemfile CHANGED
@@ -6,11 +6,4 @@ gemspec :name => 'json'
6
6
  gemspec :name => 'json_pure'
7
7
  gemspec :name => 'json-java'
8
8
 
9
- group :development, :test do
10
- gem 'simplecov', :platform => :mri_19
11
- gem 'utils'
12
- end
13
-
14
- group :test do
15
- gem 'test-unit', '~> 2.5', :platform => :mri_19
16
- end
9
+ gem 'utils'
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.7.5
1
+ 1.7.6
@@ -522,7 +522,7 @@ static VALUE cState_configure(VALUE self, VALUE opts)
522
522
  unsigned long len;
523
523
  Check_Type(tmp, T_STRING);
524
524
  len = RSTRING_LEN(tmp);
525
- state->indent = fstrndup(RSTRING_PTR(tmp), len);
525
+ state->indent = fstrndup(RSTRING_PTR(tmp), len + 1);
526
526
  state->indent_len = len;
527
527
  }
528
528
  tmp = rb_hash_aref(opts, ID2SYM(i_space));
@@ -530,7 +530,7 @@ static VALUE cState_configure(VALUE self, VALUE opts)
530
530
  unsigned long len;
531
531
  Check_Type(tmp, T_STRING);
532
532
  len = RSTRING_LEN(tmp);
533
- state->space = fstrndup(RSTRING_PTR(tmp), len);
533
+ state->space = fstrndup(RSTRING_PTR(tmp), len + 1);
534
534
  state->space_len = len;
535
535
  }
536
536
  tmp = rb_hash_aref(opts, ID2SYM(i_space_before));
@@ -538,7 +538,7 @@ static VALUE cState_configure(VALUE self, VALUE opts)
538
538
  unsigned long len;
539
539
  Check_Type(tmp, T_STRING);
540
540
  len = RSTRING_LEN(tmp);
541
- state->space_before = fstrndup(RSTRING_PTR(tmp), len);
541
+ state->space_before = fstrndup(RSTRING_PTR(tmp), len + 1);
542
542
  state->space_before_len = len;
543
543
  }
544
544
  tmp = rb_hash_aref(opts, ID2SYM(i_array_nl));
@@ -546,7 +546,7 @@ static VALUE cState_configure(VALUE self, VALUE opts)
546
546
  unsigned long len;
547
547
  Check_Type(tmp, T_STRING);
548
548
  len = RSTRING_LEN(tmp);
549
- state->array_nl = fstrndup(RSTRING_PTR(tmp), len);
549
+ state->array_nl = fstrndup(RSTRING_PTR(tmp), len + 1);
550
550
  state->array_nl_len = len;
551
551
  }
552
552
  tmp = rb_hash_aref(opts, ID2SYM(i_object_nl));
@@ -554,11 +554,11 @@ static VALUE cState_configure(VALUE self, VALUE opts)
554
554
  unsigned long len;
555
555
  Check_Type(tmp, T_STRING);
556
556
  len = RSTRING_LEN(tmp);
557
- state->object_nl = fstrndup(RSTRING_PTR(tmp), len);
557
+ state->object_nl = fstrndup(RSTRING_PTR(tmp), len + 1);
558
558
  state->object_nl_len = len;
559
559
  }
560
560
  tmp = ID2SYM(i_max_nesting);
561
- state->max_nesting = 19;
561
+ state->max_nesting = 100;
562
562
  if (option_given_p(opts, tmp)) {
563
563
  VALUE max_nesting = rb_hash_aref(opts, tmp);
564
564
  if (RTEST(max_nesting)) {
@@ -598,6 +598,18 @@ static VALUE cState_configure(VALUE self, VALUE opts)
598
598
  return self;
599
599
  }
600
600
 
601
+ static void set_state_ivars(VALUE hash, VALUE state)
602
+ {
603
+ VALUE ivars = rb_obj_instance_variables(state);
604
+ int i = 0;
605
+ for (i = 0; i < RARRAY_LEN(ivars); i++) {
606
+ VALUE key = rb_funcall(rb_ary_entry(ivars, i), i_to_s, 0);
607
+ long key_len = RSTRING_LEN(key);
608
+ VALUE value = rb_iv_get(state, StringValueCStr(key));
609
+ rb_hash_aset(hash, rb_str_intern(rb_str_substr(key, 1, key_len - 1)), value);
610
+ }
611
+ }
612
+
601
613
  /*
602
614
  * call-seq: to_h
603
615
  *
@@ -608,6 +620,7 @@ static VALUE cState_to_h(VALUE self)
608
620
  {
609
621
  VALUE result = rb_hash_new();
610
622
  GET_STATE(self);
623
+ set_state_ivars(result, self);
611
624
  rb_hash_aset(result, ID2SYM(i_indent), rb_str_new(state->indent, state->indent_len));
612
625
  rb_hash_aset(result, ID2SYM(i_space), rb_str_new(state->space, state->space_len));
613
626
  rb_hash_aset(result, ID2SYM(i_space_before), rb_str_new(state->space_before, state->space_before_len));
@@ -629,14 +642,33 @@ static VALUE cState_to_h(VALUE self)
629
642
  */
630
643
  static VALUE cState_aref(VALUE self, VALUE name)
631
644
  {
632
- GET_STATE(self);
645
+ name = rb_funcall(name, i_to_s, 0);
633
646
  if (RTEST(rb_funcall(self, i_respond_to_p, 1, name))) {
634
647
  return rb_funcall(self, i_send, 1, name);
635
648
  } else {
636
- return Qnil;
649
+ return rb_ivar_get(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name)));
637
650
  }
638
651
  }
639
652
 
653
+ /*
654
+ * call-seq: []=(name, value)
655
+ *
656
+ * Set the attribute name to value.
657
+ */
658
+ static VALUE cState_aset(VALUE self, VALUE name, VALUE value)
659
+ {
660
+ VALUE name_writer;
661
+
662
+ name = rb_funcall(name, i_to_s, 0);
663
+ name_writer = rb_str_cat2(rb_str_dup(name), "=");
664
+ if (RTEST(rb_funcall(self, i_respond_to_p, 1, name_writer))) {
665
+ return rb_funcall(self, i_send, 2, name_writer, value);
666
+ } else {
667
+ rb_ivar_set(self, rb_intern_str(rb_str_concat(rb_str_new2("@"), name)), value);
668
+ }
669
+ return Qnil;
670
+ }
671
+
640
672
  static void generate_json_object(FBuffer *buffer, VALUE Vstate, JSON_Generator_State *state, VALUE obj)
641
673
  {
642
674
  char *object_nl = state->object_nl;
@@ -908,7 +940,7 @@ static VALUE cState_initialize(int argc, VALUE *argv, VALUE self)
908
940
  {
909
941
  VALUE opts;
910
942
  GET_STATE(self);
911
- state->max_nesting = 19;
943
+ state->max_nesting = 100;
912
944
  state->buffer_initial_length = FBUFFER_INITIAL_LENGTH_DEFAULT;
913
945
  rb_scan_args(argc, argv, "01", &opts);
914
946
  if (!NIL_P(opts)) cState_configure(self, opts);
@@ -970,7 +1002,7 @@ static VALUE cState_from_state_s(VALUE self, VALUE opts)
970
1002
  static VALUE cState_indent(VALUE self)
971
1003
  {
972
1004
  GET_STATE(self);
973
- return state->indent ? rb_str_new2(state->indent) : rb_str_new2("");
1005
+ return state->indent ? rb_str_new(state->indent, state->indent_len) : rb_str_new2("");
974
1006
  }
975
1007
 
976
1008
  /*
@@ -1007,7 +1039,7 @@ static VALUE cState_indent_set(VALUE self, VALUE indent)
1007
1039
  static VALUE cState_space(VALUE self)
1008
1040
  {
1009
1041
  GET_STATE(self);
1010
- return state->space ? rb_str_new2(state->space) : rb_str_new2("");
1042
+ return state->space ? rb_str_new(state->space, state->space_len) : rb_str_new2("");
1011
1043
  }
1012
1044
 
1013
1045
  /*
@@ -1044,7 +1076,7 @@ static VALUE cState_space_set(VALUE self, VALUE space)
1044
1076
  static VALUE cState_space_before(VALUE self)
1045
1077
  {
1046
1078
  GET_STATE(self);
1047
- return state->space_before ? rb_str_new2(state->space_before) : rb_str_new2("");
1079
+ return state->space_before ? rb_str_new(state->space_before, state->space_before_len) : rb_str_new2("");
1048
1080
  }
1049
1081
 
1050
1082
  /*
@@ -1081,7 +1113,7 @@ static VALUE cState_space_before_set(VALUE self, VALUE space_before)
1081
1113
  static VALUE cState_object_nl(VALUE self)
1082
1114
  {
1083
1115
  GET_STATE(self);
1084
- return state->object_nl ? rb_str_new2(state->object_nl) : rb_str_new2("");
1116
+ return state->object_nl ? rb_str_new(state->object_nl, state->object_nl_len) : rb_str_new2("");
1085
1117
  }
1086
1118
 
1087
1119
  /*
@@ -1117,7 +1149,7 @@ static VALUE cState_object_nl_set(VALUE self, VALUE object_nl)
1117
1149
  static VALUE cState_array_nl(VALUE self)
1118
1150
  {
1119
1151
  GET_STATE(self);
1120
- return state->array_nl ? rb_str_new2(state->array_nl) : rb_str_new2("");
1152
+ return state->array_nl ? rb_str_new(state->array_nl, state->array_nl_len) : rb_str_new2("");
1121
1153
  }
1122
1154
 
1123
1155
  /*
@@ -1327,7 +1359,9 @@ void Init_generator()
1327
1359
  rb_define_method(cState, "configure", cState_configure, 1);
1328
1360
  rb_define_alias(cState, "merge", "configure");
1329
1361
  rb_define_method(cState, "to_h", cState_to_h, 0);
1362
+ rb_define_alias(cState, "to_hash", "to_h");
1330
1363
  rb_define_method(cState, "[]", cState_aref, 1);
1364
+ rb_define_method(cState, "[]=", cState_aset, 2);
1331
1365
  rb_define_method(cState, "generate", cState_generate, 1);
1332
1366
 
1333
1367
  mGeneratorMethods = rb_define_module_under(mGenerator, "GeneratorMethods");
@@ -14,6 +14,14 @@
14
14
  #include "re.h"
15
15
  #endif
16
16
 
17
+ #ifndef rb_intern_str
18
+ #define rb_intern_str(string) SYM2ID(rb_str_intern(string))
19
+ #endif
20
+
21
+ #ifndef rb_obj_instance_variables
22
+ #define rb_obj_instance_variables(object) rb_funcall(object, rb_intern("instance_variables"), 0)
23
+ #endif
24
+
17
25
  #define option_given_p(opts, key) RTEST(rb_funcall(opts, i_key_p, 1, key))
18
26
 
19
27
  /* unicode defintions */
@@ -1618,7 +1618,7 @@ static VALUE convert_encoding(VALUE source)
1618
1618
  * _opts_ can have the following keys:
1619
1619
  * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
1620
1620
  * structures. Disable depth checking with :max_nesting => false|nil|0, it
1621
- * defaults to 19.
1621
+ * defaults to 100.
1622
1622
  * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
1623
1623
  * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
1624
1624
  * false.
@@ -1655,7 +1655,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1655
1655
  json->max_nesting = 0;
1656
1656
  }
1657
1657
  } else {
1658
- json->max_nesting = 19;
1658
+ json->max_nesting = 100;
1659
1659
  }
1660
1660
  tmp = ID2SYM(i_allow_nan);
1661
1661
  if (option_given_p(opts, tmp)) {
@@ -1709,7 +1709,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1709
1709
  }
1710
1710
  }
1711
1711
  } else {
1712
- json->max_nesting = 19;
1712
+ json->max_nesting = 100;
1713
1713
  json->allow_nan = 0;
1714
1714
  json->create_additions = 1;
1715
1715
  json->create_id = rb_funcall(mJSON, i_create_id, 0);
@@ -602,7 +602,7 @@ static VALUE convert_encoding(VALUE source)
602
602
  * _opts_ can have the following keys:
603
603
  * * *max_nesting*: The maximum depth of nesting allowed in the parsed data
604
604
  * structures. Disable depth checking with :max_nesting => false|nil|0, it
605
- * defaults to 19.
605
+ * defaults to 100.
606
606
  * * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
607
607
  * defiance of RFC 4627 to be parsed by the Parser. This option defaults to
608
608
  * false.
@@ -639,7 +639,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
639
639
  json->max_nesting = 0;
640
640
  }
641
641
  } else {
642
- json->max_nesting = 19;
642
+ json->max_nesting = 100;
643
643
  }
644
644
  tmp = ID2SYM(i_allow_nan);
645
645
  if (option_given_p(opts, tmp)) {
@@ -693,7 +693,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
693
693
  }
694
694
  }
695
695
  } else {
696
- json->max_nesting = 19;
696
+ json->max_nesting = 100;
697
697
  json->allow_nan = 0;
698
698
  json->create_additions = 1;
699
699
  json->create_id = rb_funcall(mJSON, i_create_id, 0);
@@ -62,7 +62,7 @@ public class GeneratorState extends RubyObject {
62
62
  * <code>0</code> means disabled.
63
63
  */
64
64
  private int maxNesting = DEFAULT_MAX_NESTING;
65
- static final int DEFAULT_MAX_NESTING = 19;
65
+ static final int DEFAULT_MAX_NESTING = 100;
66
66
  /**
67
67
  * Whether special float values (<code>NaN</code>, <code>Infinity</code>,
68
68
  * <code>-Infinity</code>) are accepted.
@@ -262,6 +262,19 @@ public class GeneratorState extends RubyObject {
262
262
  String name = vName.asJavaString();
263
263
  if (getMetaClass().isMethodBound(name, true)) {
264
264
  return send(context, vName, Block.NULL_BLOCK);
265
+ } else {
266
+ return getInstanceVariables().getInstanceVariable("@" + name);
267
+ }
268
+ }
269
+
270
+ @JRubyMethod(name="[]=", required=2)
271
+ public IRubyObject op_aset(ThreadContext context, IRubyObject vName, IRubyObject value) {
272
+ String name = vName.asJavaString();
273
+ String nameWriter = name + "=";
274
+ if (getMetaClass().isMethodBound(nameWriter, true)) {
275
+ return send(context, context.getRuntime().newString(nameWriter), value, Block.NULL_BLOCK);
276
+ } else {
277
+ getInstanceVariables().setInstanceVariable("@" + name, value);
265
278
  }
266
279
  return context.getRuntime().getNil();
267
280
  }
@@ -445,7 +458,7 @@ public class GeneratorState extends RubyObject {
445
458
  * @param vOpts The options hash
446
459
  * @return The receiver
447
460
  */
448
- @JRubyMethod
461
+ @JRubyMethod(alias = "merge")
449
462
  public IRubyObject configure(ThreadContext context, IRubyObject vOpts) {
450
463
  OptionsReader opts = new OptionsReader(context, vOpts);
451
464
 
@@ -480,9 +493,9 @@ public class GeneratorState extends RubyObject {
480
493
  *
481
494
  * <p>Returns the configuration instance variables as a hash, that can be
482
495
  * passed to the configure method.
483
- * @return
496
+ * @return the hash
484
497
  */
485
- @JRubyMethod
498
+ @JRubyMethod(alias = "to_hash")
486
499
  public RubyHash to_h(ThreadContext context) {
487
500
  Ruby runtime = context.getRuntime();
488
501
  RubyHash result = RubyHash.newHash(runtime);
@@ -498,6 +511,9 @@ public class GeneratorState extends RubyObject {
498
511
  result.op_aset(context, runtime.newSymbol("max_nesting"), max_nesting_get(context));
499
512
  result.op_aset(context, runtime.newSymbol("depth"), depth_get(context));
500
513
  result.op_aset(context, runtime.newSymbol("buffer_initial_length"), buffer_initial_length_get(context));
514
+ for (String name: getInstanceVariableNameList()) {
515
+ result.op_aset(context, runtime.newSymbol(name.substring(1)), getInstanceVariables().getInstanceVariable(name));
516
+ }
501
517
  return result;
502
518
  }
503
519
 
@@ -58,7 +58,7 @@ public class Parser extends RubyObject {
58
58
  private RubyClass arrayClass;
59
59
  private RubyHash match_string;
60
60
 
61
- private static final int DEFAULT_MAX_NESTING = 19;
61
+ private static final int DEFAULT_MAX_NESTING = 100;
62
62
 
63
63
  private static final ByteList JSON_MINUS_INFINITY = new ByteList(ByteList.plain("-Infinity"));
64
64
  // constant names in the JSON module containing those values
@@ -113,7 +113,7 @@ public class Parser extends RubyObject {
113
113
  * <dt><code>:max_nesting</code>
114
114
  * <dd>The maximum depth of nesting allowed in the parsed data
115
115
  * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
116
- * it defaults to 19.
116
+ * it defaults to 100.
117
117
  *
118
118
  * <dt><code>:allow_nan</code>
119
119
  * <dd>If set to <code>true</code>, allow <code>NaN</code>,
@@ -56,7 +56,7 @@ public class Parser extends RubyObject {
56
56
  private RubyClass arrayClass;
57
57
  private RubyHash match_string;
58
58
 
59
- private static final int DEFAULT_MAX_NESTING = 19;
59
+ private static final int DEFAULT_MAX_NESTING = 100;
60
60
 
61
61
  private static final ByteList JSON_MINUS_INFINITY = new ByteList(ByteList.plain("-Infinity"));
62
62
  // constant names in the JSON module containing those values
@@ -111,7 +111,7 @@ public class Parser extends RubyObject {
111
111
  * <dt><code>:max_nesting</code>
112
112
  * <dd>The maximum depth of nesting allowed in the parsed data
113
113
  * structures. Disable depth checking with <code>:max_nesting => false|nil|0</code>,
114
- * it defaults to 19.
114
+ * it defaults to 100.
115
115
  *
116
116
  * <dt><code>:allow_nan</code>
117
117
  * <dd>If set to <code>true</code>, allow <code>NaN</code>,
data/json.gemspec CHANGED
@@ -2,23 +2,23 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json"
5
- s.version = "1.7.5"
5
+ s.version = "1.7.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2012-08-17"
9
+ s.date = "2012-12-31"
10
10
  s.description = "This is a JSON implementation as a Ruby extension in C."
11
11
  s.email = "flori@ping.de"
12
12
  s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
13
13
  s.extra_rdoc_files = ["README.rdoc"]
14
- s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
14
+ s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json_generic_object.rb", "./tests/test_json.rb"]
15
15
  s.homepage = "http://flori.github.com/json"
16
16
  s.rdoc_options = ["--title", "JSON implemention for Ruby", "--main", "README.rdoc"]
17
17
  s.require_paths = ["lib"]
18
18
  s.rubyforge_project = "json"
19
19
  s.rubygems_version = "1.8.24"
20
20
  s.summary = "JSON Implementation for Ruby"
21
- s.test_files = ["./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
21
+ s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json_generic_object.rb", "./tests/test_json.rb"]
22
22
 
23
23
  if s.respond_to? :specification_version then
24
24
  s.specification_version = 3
data/json_pure.gemspec CHANGED
@@ -2,22 +2,22 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json_pure"
5
- s.version = "1.7.5"
5
+ s.version = "1.7.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Florian Frank"]
9
- s.date = "2012-08-17"
9
+ s.date = "2012-12-31"
10
10
  s.description = "This is a JSON implementation in pure Ruby."
11
11
  s.email = "flori@ping.de"
12
12
  s.extra_rdoc_files = ["README.rdoc"]
13
- s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
13
+ s.files = [".gitignore", ".travis.yml", "CHANGES", "COPYING", "COPYING-json-jruby", "GPL", "Gemfile", "README-json-jruby.markdown", "README.rdoc", "Rakefile", "TODO", "VERSION", "data/example.json", "data/index.html", "data/prototype.js", "diagrams/.keep", "ext/json/ext/fbuffer/fbuffer.h", "ext/json/ext/generator/depend", "ext/json/ext/generator/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "ext/json/ext/parser/depend", "ext/json/ext/parser/extconf.rb", "ext/json/ext/parser/parser.c", "ext/json/ext/parser/parser.h", "ext/json/ext/parser/parser.rl", "install.rb", "java/src/json/ext/ByteListTranscoder.java", "java/src/json/ext/Generator.java", "java/src/json/ext/GeneratorMethods.java", "java/src/json/ext/GeneratorService.java", "java/src/json/ext/GeneratorState.java", "java/src/json/ext/OptionsReader.java", "java/src/json/ext/Parser.java", "java/src/json/ext/Parser.rl", "java/src/json/ext/ParserService.java", "java/src/json/ext/RuntimeInfo.java", "java/src/json/ext/StringDecoder.java", "java/src/json/ext/StringEncoder.java", "java/src/json/ext/Utils.java", "json-java.gemspec", "json.gemspec", "json_pure.gemspec", "lib/json.rb", "lib/json/add/bigdecimal.rb", "lib/json/add/complex.rb", "lib/json/add/core.rb", "lib/json/add/date.rb", "lib/json/add/date_time.rb", "lib/json/add/exception.rb", "lib/json/add/ostruct.rb", "lib/json/add/range.rb", "lib/json/add/rational.rb", "lib/json/add/regexp.rb", "lib/json/add/struct.rb", "lib/json/add/symbol.rb", "lib/json/add/time.rb", "lib/json/common.rb", "lib/json/ext.rb", "lib/json/ext/.keep", "lib/json/generic_object.rb", "lib/json/pure.rb", "lib/json/pure/generator.rb", "lib/json/pure/parser.rb", "lib/json/version.rb", "tests/fixtures/fail1.json", "tests/fixtures/fail10.json", "tests/fixtures/fail11.json", "tests/fixtures/fail12.json", "tests/fixtures/fail13.json", "tests/fixtures/fail14.json", "tests/fixtures/fail18.json", "tests/fixtures/fail19.json", "tests/fixtures/fail2.json", "tests/fixtures/fail20.json", "tests/fixtures/fail21.json", "tests/fixtures/fail22.json", "tests/fixtures/fail23.json", "tests/fixtures/fail24.json", "tests/fixtures/fail25.json", "tests/fixtures/fail27.json", "tests/fixtures/fail28.json", "tests/fixtures/fail3.json", "tests/fixtures/fail4.json", "tests/fixtures/fail5.json", "tests/fixtures/fail6.json", "tests/fixtures/fail7.json", "tests/fixtures/fail8.json", "tests/fixtures/fail9.json", "tests/fixtures/pass1.json", "tests/fixtures/pass15.json", "tests/fixtures/pass16.json", "tests/fixtures/pass17.json", "tests/fixtures/pass2.json", "tests/fixtures/pass26.json", "tests/fixtures/pass3.json", "tests/setup_variant.rb", "tests/test_json.rb", "tests/test_json_addition.rb", "tests/test_json_encoding.rb", "tests/test_json_fixtures.rb", "tests/test_json_generate.rb", "tests/test_json_generic_object.rb", "tests/test_json_string_matching.rb", "tests/test_json_unicode.rb", "tools/fuzz.rb", "tools/server.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json_generic_object.rb", "./tests/test_json.rb"]
14
14
  s.homepage = "http://flori.github.com/json"
15
15
  s.rdoc_options = ["--title", "JSON implemention for ruby", "--main", "README.rdoc"]
16
16
  s.require_paths = ["lib"]
17
17
  s.rubyforge_project = "json"
18
18
  s.rubygems_version = "1.8.24"
19
19
  s.summary = "JSON Implementation for Ruby"
20
- s.test_files = ["./tests/test_json.rb", "./tests/test_json_addition.rb", "./tests/test_json_encoding.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_generate.rb", "./tests/test_json_generic_object.rb", "./tests/test_json_string_matching.rb", "./tests/test_json_unicode.rb"]
20
+ s.test_files = ["./tests/test_json_string_matching.rb", "./tests/test_json_fixtures.rb", "./tests/test_json_unicode.rb", "./tests/test_json_addition.rb", "./tests/test_json_generate.rb", "./tests/test_json_encoding.rb", "./tests/test_json_generic_object.rb", "./tests/test_json.rb"]
21
21
 
22
22
  if s.respond_to? :specification_version then
23
23
  s.specification_version = 3
@@ -4,10 +4,16 @@ end
4
4
  defined?(::BigDecimal) or require 'bigdecimal'
5
5
 
6
6
  class BigDecimal
7
+ # Import a JSON Marshalled object.
8
+ #
9
+ # method used for JSON marshalling support.
7
10
  def self.json_create(object)
8
11
  BigDecimal._load object['b']
9
12
  end
10
13
 
14
+ # Marshal the object to JSON.
15
+ #
16
+ # method used for JSON marshalling support.
11
17
  def as_json(*)
12
18
  {
13
19
  JSON.create_id => self.class.name,
@@ -15,6 +21,7 @@ class BigDecimal
15
21
  }
16
22
  end
17
23
 
24
+ # return the JSON value
18
25
  def to_json(*)
19
26
  as_json.to_json
20
27
  end
data/lib/json/common.rb CHANGED
@@ -139,7 +139,7 @@ module JSON
139
139
  # keys:
140
140
  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
141
141
  # structures. Disable depth checking with :max_nesting => false. It defaults
142
- # to 19.
142
+ # to 100.
143
143
  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
144
144
  # defiance of RFC 4627 to be parsed by the Parser. This option defaults
145
145
  # to false.
@@ -199,7 +199,7 @@ module JSON
199
199
  # encountered. This options defaults to false.
200
200
  # * *max_nesting*: The maximum depth of nesting allowed in the data
201
201
  # structures from which JSON is to be generated. Disable depth checking
202
- # with :max_nesting => false, it defaults to 19.
202
+ # with :max_nesting => false, it defaults to 100.
203
203
  #
204
204
  # See also the fast_generate for the fastest creation method with the least
205
205
  # amount of sanity checks, and the pretty_generate method for some
@@ -10,6 +10,21 @@ module JSON
10
10
  data.delete JSON.create_id
11
11
  self[data]
12
12
  end
13
+
14
+ def from_hash(object)
15
+ case
16
+ when object.respond_to?(:to_hash)
17
+ result = new
18
+ object.to_hash.each do |key, value|
19
+ result[key] = from_hash(value)
20
+ end
21
+ result
22
+ when object.respond_to?(:to_ary)
23
+ object.to_ary.map { |a| from_hash(a) }
24
+ else
25
+ object
26
+ end
27
+ end
13
28
  end
14
29
 
15
30
  def to_hash
@@ -220,17 +220,22 @@ module JSON
220
220
  # Configure this State instance with the Hash _opts_, and return
221
221
  # itself.
222
222
  def configure(opts)
223
- @indent = opts[:indent] if opts.key?(:indent)
224
- @space = opts[:space] if opts.key?(:space)
225
- @space_before = opts[:space_before] if opts.key?(:space_before)
226
- @object_nl = opts[:object_nl] if opts.key?(:object_nl)
227
- @array_nl = opts[:array_nl] if opts.key?(:array_nl)
228
- @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
229
- @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only)
230
- @depth = opts[:depth] || 0
231
- @quirks_mode = opts[:quirks_mode] if opts.key?(:quirks_mode)
232
- if !opts.key?(:max_nesting) # defaults to 19
233
- @max_nesting = 19
223
+ for key, value in opts
224
+ instance_variable_set "@#{key}", value
225
+ end
226
+ @indent = opts[:indent] if opts.key?(:indent)
227
+ @space = opts[:space] if opts.key?(:space)
228
+ @space_before = opts[:space_before] if opts.key?(:space_before)
229
+ @object_nl = opts[:object_nl] if opts.key?(:object_nl)
230
+ @array_nl = opts[:array_nl] if opts.key?(:array_nl)
231
+ @allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
232
+ @ascii_only = opts[:ascii_only] if opts.key?(:ascii_only)
233
+ @depth = opts[:depth] || 0
234
+ @quirks_mode = opts[:quirks_mode] if opts.key?(:quirks_mode)
235
+ @buffer_initial_length ||= opts[:buffer_initial_length]
236
+
237
+ if !opts.key?(:max_nesting) # defaults to 100
238
+ @max_nesting = 100
234
239
  elsif opts[:max_nesting]
235
240
  @max_nesting = opts[:max_nesting]
236
241
  else
@@ -244,12 +249,15 @@ module JSON
244
249
  # passed to the configure method.
245
250
  def to_h
246
251
  result = {}
247
- for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only quirks_mode buffer_initial_length depth]
248
- result[iv.intern] = instance_variable_get("@#{iv}")
252
+ for iv in instance_variables
253
+ iv = iv.to_s[1..-1]
254
+ result[iv.to_sym] = self[iv]
249
255
  end
250
256
  result
251
257
  end
252
258
 
259
+ alias to_hash to_h
260
+
253
261
  # Generates a valid JSON document from object +obj+ and returns the
254
262
  # result. If no valid JSON document can be created this method raises a
255
263
  # GeneratorError exception.
@@ -267,7 +275,19 @@ module JSON
267
275
 
268
276
  # Return the value returned by method +name+.
269
277
  def [](name)
270
- __send__ name
278
+ if respond_to?(name)
279
+ __send__(name)
280
+ else
281
+ instance_variable_get("@#{name}")
282
+ end
283
+ end
284
+
285
+ def []=(name, value)
286
+ if respond_to?(name_writer = "#{name}=")
287
+ __send__ name_writer, value
288
+ else
289
+ instance_variable_set "@#{name}", value
290
+ end
271
291
  end
272
292
  end
273
293
 
@@ -56,7 +56,7 @@ module JSON
56
56
  # keys:
57
57
  # * *max_nesting*: The maximum depth of nesting allowed in the parsed data
58
58
  # structures. Disable depth checking with :max_nesting => false|nil|0,
59
- # it defaults to 19.
59
+ # it defaults to 100.
60
60
  # * *allow_nan*: If set to true, allow NaN, Infinity and -Infinity in
61
61
  # defiance of RFC 4627 to be parsed by the Parser. This option defaults
62
62
  # to false.
@@ -76,8 +76,8 @@ module JSON
76
76
  source = convert_encoding source
77
77
  end
78
78
  super source
79
- if !opts.key?(:max_nesting) # defaults to 19
80
- @max_nesting = 19
79
+ if !opts.key?(:max_nesting) # defaults to 100
80
+ @max_nesting = 100
81
81
  elsif opts[:max_nesting]
82
82
  @max_nesting = opts[:max_nesting]
83
83
  else
data/lib/json/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.7.5'
3
+ VERSION = '1.7.6'
4
4
  VERSION_ARRAY = VERSION.split(/\./).map { |x| x.to_i } # :nodoc:
5
5
  VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
6
6
  VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
@@ -1 +1 @@
1
- [[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]
1
+ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
data/tests/test_json.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -446,12 +446,12 @@ EOT
446
446
  assert_raises(JSON::NestingError) { JSON.parse '[[]]', :max_nesting => 1 }
447
447
  assert_raises(JSON::NestingError) { JSON.parser.new('[[]]', :max_nesting => 1).parse }
448
448
  assert_equal [[]], JSON.parse('[[]]', :max_nesting => 2)
449
- too_deep = '[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]'
449
+ too_deep = '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
450
450
  too_deep_ary = eval too_deep
451
451
  assert_raises(JSON::NestingError) { JSON.parse too_deep }
452
452
  assert_raises(JSON::NestingError) { JSON.parser.new(too_deep).parse }
453
- assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 19 }
454
- ok = JSON.parse too_deep, :max_nesting => 20
453
+ assert_raises(JSON::NestingError) { JSON.parse too_deep, :max_nesting => 100 }
454
+ ok = JSON.parse too_deep, :max_nesting => 101
455
455
  assert_equal too_deep_ary, ok
456
456
  ok = JSON.parse too_deep, :max_nesting => nil
457
457
  assert_equal too_deep_ary, ok
@@ -462,8 +462,8 @@ EOT
462
462
  assert_raises(JSON::NestingError) { JSON.generate [[]], :max_nesting => 1 }
463
463
  assert_equal '[[]]', JSON.generate([[]], :max_nesting => 2)
464
464
  assert_raises(JSON::NestingError) { JSON.generate too_deep_ary }
465
- assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 19 }
466
- ok = JSON.generate too_deep_ary, :max_nesting => 20
465
+ assert_raises(JSON::NestingError) { JSON.generate too_deep_ary, :max_nesting => 100 }
466
+ ok = JSON.generate too_deep_ary, :max_nesting => 101
467
467
  assert_equal too_deep, ok
468
468
  ok = JSON.generate too_deep_ary, :max_nesting => nil
469
469
  assert_equal too_deep, ok
@@ -494,18 +494,18 @@ EOT
494
494
  end
495
495
 
496
496
  def test_dump
497
- too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
497
+ too_deep = '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
498
498
  assert_equal too_deep, JSON.dump(eval(too_deep))
499
499
  assert_kind_of String, Marshal.dump(eval(too_deep))
500
- assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 19) }
501
- assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 19) }
502
- assert_equal too_deep, JSON.dump(eval(too_deep), 20)
503
- assert_kind_of String, Marshal.dump(eval(too_deep), 20)
500
+ assert_raises(ArgumentError) { JSON.dump(eval(too_deep), 100) }
501
+ assert_raises(ArgumentError) { Marshal.dump(eval(too_deep), 100) }
502
+ assert_equal too_deep, JSON.dump(eval(too_deep), 101)
503
+ assert_kind_of String, Marshal.dump(eval(too_deep), 101)
504
504
  output = StringIO.new
505
505
  JSON.dump(eval(too_deep), output)
506
506
  assert_equal too_deep, output.string
507
507
  output = StringIO.new
508
- JSON.dump(eval(too_deep), output, 20)
508
+ JSON.dump(eval(too_deep), output, 101)
509
509
  assert_equal too_deep, output.string
510
510
  end
511
511
 
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -130,7 +130,7 @@ EOT
130
130
  :quirks_mode => false,
131
131
  :depth => 0,
132
132
  :indent => " ",
133
- :max_nesting => 19,
133
+ :max_nesting => 100,
134
134
  :object_nl => "\n",
135
135
  :space => " ",
136
136
  :space_before => "",
@@ -147,7 +147,7 @@ EOT
147
147
  :quirks_mode => false,
148
148
  :depth => 0,
149
149
  :indent => "",
150
- :max_nesting => 19,
150
+ :max_nesting => 100,
151
151
  :object_nl => "",
152
152
  :space => "",
153
153
  :space_before => "",
@@ -200,7 +200,7 @@ EOT
200
200
  s = JSON.state.new
201
201
  assert_equal 0, s.depth
202
202
  assert_raises(JSON::NestingError) { ary.to_json(s) }
203
- assert_equal 19, s.depth
203
+ assert_equal 100, s.depth
204
204
  end
205
205
 
206
206
  def test_buffer_initial_length
@@ -227,6 +227,30 @@ EOT
227
227
  GC.stress = stress
228
228
  end if GC.respond_to?(:stress=)
229
229
 
230
+ def test_configure_using_configure_and_merge
231
+ numbered_state = {
232
+ :indent => "1",
233
+ :space => '2',
234
+ :space_before => '3',
235
+ :object_nl => '4',
236
+ :array_nl => '5'
237
+ }
238
+ state1 = JSON.state.new
239
+ state1.merge(numbered_state)
240
+ assert_equal '1', state1.indent
241
+ assert_equal '2', state1.space
242
+ assert_equal '3', state1.space_before
243
+ assert_equal '4', state1.object_nl
244
+ assert_equal '5', state1.array_nl
245
+ state2 = JSON.state.new
246
+ state2.configure(numbered_state)
247
+ assert_equal '1', state2.indent
248
+ assert_equal '2', state2.space
249
+ assert_equal '3', state2.space_before
250
+ assert_equal '4', state2.object_nl
251
+ assert_equal '5', state2.array_nl
252
+ end
253
+
230
254
  if defined?(JSON::Ext::Generator)
231
255
  def test_broken_bignum # [ruby-core:38867]
232
256
  pid = fork do
@@ -248,4 +272,28 @@ EOT
248
272
  # introducing race conditions of tests are run in parallel
249
273
  end
250
274
  end
275
+
276
+ def test_hash_likeness_set_symbol
277
+ state = JSON.state.new
278
+ assert_equal nil, state[:foo]
279
+ assert_equal nil, state['foo']
280
+ state[:foo] = :bar
281
+ assert_equal :bar, state[:foo]
282
+ assert_equal :bar, state['foo']
283
+ state_hash = state.to_hash
284
+ assert_kind_of Hash, state_hash
285
+ assert_equal :bar, state_hash[:foo]
286
+ end
287
+
288
+ def test_hash_likeness_set_string
289
+ state = JSON.state.new
290
+ assert_equal nil, state[:foo]
291
+ assert_equal nil, state['foo']
292
+ state['foo'] = :bar
293
+ assert_equal :bar, state[:foo]
294
+ assert_equal :bar, state['foo']
295
+ state_hash = state.to_hash
296
+ assert_kind_of Hash, state_hash
297
+ assert_equal :bar, state_hash[:foo]
298
+ end
251
299
  end
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -32,4 +32,15 @@ class TestJSONGenericObject < Test::Unit::TestCase
32
32
  l = JSON('{ "a": { "b": 2 } }', :object_class => GenericObject)
33
33
  assert_equal 2, l.a.b
34
34
  end
35
+
36
+ def test_from_hash
37
+ result = GenericObject.from_hash(
38
+ :foo => { :bar => { :baz => true }, :quux => [ { :foobar => true } ] })
39
+ assert_kind_of GenericObject, result.foo
40
+ assert_kind_of GenericObject, result.foo.bar
41
+ assert_equal true, result.foo.bar.baz
42
+ assert_kind_of GenericObject, result.foo.quux.first
43
+ assert_equal true, result.foo.quux.first.foobar
44
+ assert_equal true, GenericObject.from_hash(true)
45
+ end
35
46
  end
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # -*- coding: utf-8 -*-
2
+ # encoding: utf-8
3
3
 
4
4
  require 'test/unit'
5
5
  require File.join(File.dirname(__FILE__), 'setup_variant')
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_pure
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.5
4
+ version: 1.7.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-08-17 00:00:00.000000000 Z
12
+ date: 2012-12-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: permutation
@@ -173,14 +173,14 @@ files:
173
173
  - tests/test_json_unicode.rb
174
174
  - tools/fuzz.rb
175
175
  - tools/server.rb
176
- - ./tests/test_json.rb
177
- - ./tests/test_json_addition.rb
178
- - ./tests/test_json_encoding.rb
176
+ - ./tests/test_json_string_matching.rb
179
177
  - ./tests/test_json_fixtures.rb
178
+ - ./tests/test_json_unicode.rb
179
+ - ./tests/test_json_addition.rb
180
180
  - ./tests/test_json_generate.rb
181
+ - ./tests/test_json_encoding.rb
181
182
  - ./tests/test_json_generic_object.rb
182
- - ./tests/test_json_string_matching.rb
183
- - ./tests/test_json_unicode.rb
183
+ - ./tests/test_json.rb
184
184
  homepage: http://flori.github.com/json
185
185
  licenses: []
186
186
  post_install_message:
@@ -199,7 +199,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
199
199
  version: '0'
200
200
  segments:
201
201
  - 0
202
- hash: -4374131742481169366
202
+ hash: -365926163349180863
203
203
  required_rubygems_version: !ruby/object:Gem::Requirement
204
204
  none: false
205
205
  requirements:
@@ -213,11 +213,11 @@ signing_key:
213
213
  specification_version: 3
214
214
  summary: JSON Implementation for Ruby
215
215
  test_files:
216
- - ./tests/test_json.rb
217
- - ./tests/test_json_addition.rb
218
- - ./tests/test_json_encoding.rb
216
+ - ./tests/test_json_string_matching.rb
219
217
  - ./tests/test_json_fixtures.rb
218
+ - ./tests/test_json_unicode.rb
219
+ - ./tests/test_json_addition.rb
220
220
  - ./tests/test_json_generate.rb
221
+ - ./tests/test_json_encoding.rb
221
222
  - ./tests/test_json_generic_object.rb
222
- - ./tests/test_json_string_matching.rb
223
- - ./tests/test_json_unicode.rb
223
+ - ./tests/test_json.rb