json_pure 1.6.7 → 1.6.8

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -1,3 +1,8 @@
1
+ 2013-02-04 (1.6.8)
2
+ * Security fix for JSON create_additions default value. It should not be
3
+ possible to create additions unless
4
+ explicitely requested by setting the create_additions argument to true or
5
+ using the JSON.load/dump interface.
1
6
  2012-04-27 (1.6.7)
2
7
  * Fix possible crash when trying to parse nil value.
3
8
  2012-02-11 (1.6.6)
data/Gemfile CHANGED
@@ -6,10 +6,6 @@ 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
- end
12
-
13
- group :test do
14
- gem 'test-unit', '2.4.7', :platform => :mri_19
15
- end
9
+ gem 'utils'
10
+ gem 'test-unit'
11
+ gem 'debugger', :platform => :mri_19
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.6.7
1
+ 1.6.8
@@ -1680,7 +1680,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
1680
1680
  if (option_given_p(opts, tmp)) {
1681
1681
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
1682
1682
  } else {
1683
- json->create_additions = 1;
1683
+ json->create_additions = 0;
1684
1684
  }
1685
1685
  tmp = ID2SYM(i_create_id);
1686
1686
  if (option_given_p(opts, tmp)) {
@@ -664,7 +664,7 @@ static VALUE cParser_initialize(int argc, VALUE *argv, VALUE self)
664
664
  if (option_given_p(opts, tmp)) {
665
665
  json->create_additions = RTEST(rb_hash_aref(opts, tmp));
666
666
  } else {
667
- json->create_additions = 1;
667
+ json->create_additions = 0;
668
668
  }
669
669
  tmp = ID2SYM(i_create_id);
670
670
  if (option_given_p(opts, tmp)) {
@@ -166,7 +166,7 @@ public class Parser extends RubyObject {
166
166
  this.symbolizeNames = opts.getBool("symbolize_names", false);
167
167
  this.quirksMode = opts.getBool("quirks_mode", false);
168
168
  this.createId = opts.getString("create_id", getCreateId(context));
169
- this.createAdditions = opts.getBool("create_additions", true);
169
+ this.createAdditions = opts.getBool("create_additions", false);
170
170
  this.objectClass = opts.getClass("object_class", runtime.getHash());
171
171
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
172
172
  this.match_string = opts.getHash("match_string");
@@ -1617,14 +1617,14 @@ static final int JSON_array_en_main = 1;
1617
1617
  }
1618
1618
 
1619
1619
 
1620
- // line 1623 "Parser.java"
1620
+ // line 1621 "Parser.java"
1621
1621
  {
1622
1622
  cs = JSON_array_start;
1623
1623
  }
1624
1624
 
1625
- // line 714 "Parser.rl"
1625
+ // line 712 "Parser.rl"
1626
1626
 
1627
- // line 1630 "Parser.java"
1627
+ // line 1628 "Parser.java"
1628
1628
  {
1629
1629
  int _klen;
1630
1630
  int _trans = 0;
@@ -1728,7 +1728,7 @@ case 1:
1728
1728
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
1729
1729
  }
1730
1730
  break;
1731
- // line 1734 "Parser.java"
1731
+ // line 1732 "Parser.java"
1732
1732
  }
1733
1733
  }
1734
1734
  }
@@ -1748,7 +1748,7 @@ case 5:
1748
1748
  break; }
1749
1749
  }
1750
1750
 
1751
- // line 715 "Parser.rl"
1751
+ // line 713 "Parser.rl"
1752
1752
 
1753
1753
  if (cs >= JSON_array_first_final) {
1754
1754
  res.update(result, p + 1);
@@ -1758,7 +1758,7 @@ case 5:
1758
1758
  }
1759
1759
 
1760
1760
 
1761
- // line 1764 "Parser.java"
1761
+ // line 1762 "Parser.java"
1762
1762
  private static byte[] init__JSON_object_actions_0()
1763
1763
  {
1764
1764
  return new byte [] {
@@ -1881,7 +1881,7 @@ static final int JSON_object_error = 0;
1881
1881
  static final int JSON_object_en_main = 1;
1882
1882
 
1883
1883
 
1884
- // line 774 "Parser.rl"
1884
+ // line 772 "Parser.rl"
1885
1885
 
1886
1886
 
1887
1887
  void parseObject(ParserResult res, int p, int pe) {
@@ -1906,14 +1906,14 @@ static final int JSON_object_en_main = 1;
1906
1906
  }
1907
1907
 
1908
1908
 
1909
- // line 1912 "Parser.java"
1909
+ // line 1910 "Parser.java"
1910
1910
  {
1911
1911
  cs = JSON_object_start;
1912
1912
  }
1913
1913
 
1914
- // line 798 "Parser.rl"
1914
+ // line 796 "Parser.rl"
1915
1915
 
1916
- // line 1919 "Parser.java"
1916
+ // line 1917 "Parser.java"
1917
1917
  {
1918
1918
  int _klen;
1919
1919
  int _trans = 0;
@@ -1994,7 +1994,7 @@ case 1:
1994
1994
  switch ( _JSON_object_actions[_acts++] )
1995
1995
  {
1996
1996
  case 0:
1997
- // line 729 "Parser.rl"
1997
+ // line 727 "Parser.rl"
1998
1998
  {
1999
1999
  parseValue(res, p, pe);
2000
2000
  if (res.result == null) {
@@ -2011,7 +2011,7 @@ case 1:
2011
2011
  }
2012
2012
  break;
2013
2013
  case 1:
2014
- // line 744 "Parser.rl"
2014
+ // line 742 "Parser.rl"
2015
2015
  {
2016
2016
  parseString(res, p, pe);
2017
2017
  if (res.result == null) {
@@ -2031,13 +2031,13 @@ case 1:
2031
2031
  }
2032
2032
  break;
2033
2033
  case 2:
2034
- // line 762 "Parser.rl"
2034
+ // line 760 "Parser.rl"
2035
2035
  {
2036
2036
  p--;
2037
2037
  { p += 1; _goto_targ = 5; if (true) continue _goto;}
2038
2038
  }
2039
2039
  break;
2040
- // line 2043 "Parser.java"
2040
+ // line 2041 "Parser.java"
2041
2041
  }
2042
2042
  }
2043
2043
  }
@@ -2057,7 +2057,7 @@ case 5:
2057
2057
  break; }
2058
2058
  }
2059
2059
 
2060
- // line 799 "Parser.rl"
2060
+ // line 797 "Parser.rl"
2061
2061
 
2062
2062
  if (cs < JSON_object_first_final) {
2063
2063
  res.update(null, p + 1);
@@ -2090,7 +2090,7 @@ case 5:
2090
2090
  }
2091
2091
 
2092
2092
 
2093
- // line 2096 "Parser.java"
2093
+ // line 2094 "Parser.java"
2094
2094
  private static byte[] init__JSON_actions_0()
2095
2095
  {
2096
2096
  return new byte [] {
@@ -2194,7 +2194,7 @@ static final int JSON_error = 0;
2194
2194
  static final int JSON_en_main = 1;
2195
2195
 
2196
2196
 
2197
- // line 864 "Parser.rl"
2197
+ // line 862 "Parser.rl"
2198
2198
 
2199
2199
 
2200
2200
  public IRubyObject parseStrict() {
@@ -2204,16 +2204,16 @@ static final int JSON_en_main = 1;
2204
2204
  ParserResult res = new ParserResult();
2205
2205
 
2206
2206
 
2207
- // line 2210 "Parser.java"
2207
+ // line 2208 "Parser.java"
2208
2208
  {
2209
2209
  cs = JSON_start;
2210
2210
  }
2211
2211
 
2212
- // line 873 "Parser.rl"
2212
+ // line 871 "Parser.rl"
2213
2213
  p = byteList.begin();
2214
2214
  pe = p + byteList.length();
2215
2215
 
2216
- // line 2219 "Parser.java"
2216
+ // line 2217 "Parser.java"
2217
2217
  {
2218
2218
  int _klen;
2219
2219
  int _trans = 0;
@@ -2294,7 +2294,7 @@ case 1:
2294
2294
  switch ( _JSON_actions[_acts++] )
2295
2295
  {
2296
2296
  case 0:
2297
- // line 836 "Parser.rl"
2297
+ // line 834 "Parser.rl"
2298
2298
  {
2299
2299
  currentNesting = 1;
2300
2300
  parseObject(res, p, pe);
@@ -2308,7 +2308,7 @@ case 1:
2308
2308
  }
2309
2309
  break;
2310
2310
  case 1:
2311
- // line 848 "Parser.rl"
2311
+ // line 846 "Parser.rl"
2312
2312
  {
2313
2313
  currentNesting = 1;
2314
2314
  parseArray(res, p, pe);
@@ -2321,7 +2321,7 @@ case 1:
2321
2321
  }
2322
2322
  }
2323
2323
  break;
2324
- // line 2327 "Parser.java"
2324
+ // line 2325 "Parser.java"
2325
2325
  }
2326
2326
  }
2327
2327
  }
@@ -2341,7 +2341,7 @@ case 5:
2341
2341
  break; }
2342
2342
  }
2343
2343
 
2344
- // line 876 "Parser.rl"
2344
+ // line 874 "Parser.rl"
2345
2345
 
2346
2346
  if (cs >= JSON_first_final && p == pe) {
2347
2347
  return result;
@@ -2351,7 +2351,7 @@ case 5:
2351
2351
  }
2352
2352
 
2353
2353
 
2354
- // line 2357 "Parser.java"
2354
+ // line 2355 "Parser.java"
2355
2355
  private static byte[] init__JSON_quirks_mode_actions_0()
2356
2356
  {
2357
2357
  return new byte [] {
@@ -2454,7 +2454,7 @@ static final int JSON_quirks_mode_error = 0;
2454
2454
  static final int JSON_quirks_mode_en_main = 1;
2455
2455
 
2456
2456
 
2457
- // line 904 "Parser.rl"
2457
+ // line 902 "Parser.rl"
2458
2458
 
2459
2459
 
2460
2460
  public IRubyObject parseQuirksMode() {
@@ -2464,16 +2464,16 @@ static final int JSON_quirks_mode_en_main = 1;
2464
2464
  ParserResult res = new ParserResult();
2465
2465
 
2466
2466
 
2467
- // line 2470 "Parser.java"
2467
+ // line 2468 "Parser.java"
2468
2468
  {
2469
2469
  cs = JSON_quirks_mode_start;
2470
2470
  }
2471
2471
 
2472
- // line 913 "Parser.rl"
2472
+ // line 911 "Parser.rl"
2473
2473
  p = byteList.begin();
2474
2474
  pe = p + byteList.length();
2475
2475
 
2476
- // line 2479 "Parser.java"
2476
+ // line 2477 "Parser.java"
2477
2477
  {
2478
2478
  int _klen;
2479
2479
  int _trans = 0;
@@ -2554,7 +2554,7 @@ case 1:
2554
2554
  switch ( _JSON_quirks_mode_actions[_acts++] )
2555
2555
  {
2556
2556
  case 0:
2557
- // line 890 "Parser.rl"
2557
+ // line 888 "Parser.rl"
2558
2558
  {
2559
2559
  parseValue(res, p, pe);
2560
2560
  if (res.result == null) {
@@ -2566,7 +2566,7 @@ case 1:
2566
2566
  }
2567
2567
  }
2568
2568
  break;
2569
- // line 2572 "Parser.java"
2569
+ // line 2570 "Parser.java"
2570
2570
  }
2571
2571
  }
2572
2572
  }
@@ -2586,7 +2586,7 @@ case 5:
2586
2586
  break; }
2587
2587
  }
2588
2588
 
2589
- // line 916 "Parser.rl"
2589
+ // line 914 "Parser.rl"
2590
2590
 
2591
2591
  if (cs >= JSON_quirks_mode_first_final && p == pe) {
2592
2592
  return result;
@@ -164,7 +164,7 @@ public class Parser extends RubyObject {
164
164
  this.symbolizeNames = opts.getBool("symbolize_names", false);
165
165
  this.quirksMode = opts.getBool("quirks_mode", false);
166
166
  this.createId = opts.getString("create_id", getCreateId(context));
167
- this.createAdditions = opts.getBool("create_additions", true);
167
+ this.createAdditions = opts.getBool("create_additions", false);
168
168
  this.objectClass = opts.getClass("object_class", runtime.getHash());
169
169
  this.arrayClass = opts.getClass("array_class", runtime.getArray());
170
170
  this.match_string = opts.getHash("match_string");
data/json.gemspec CHANGED
@@ -2,21 +2,21 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json"
5
- s.version = "1.6.7"
5
+ s.version = "1.6.8"
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-04-28"
9
+ s.date = "2013-02-10"
10
10
  s.description = "This is a JSON implementation as a Ruby extension in C."
11
11
  s.email = "flori@ping.de"
12
- s.extensions = ["ext/json/ext/parser/extconf.rb", "ext/json/ext/generator/extconf.rb"]
12
+ s.extensions = ["ext/json/ext/generator/extconf.rb", "ext/json/ext/parser/extconf.rb"]
13
13
  s.extra_rdoc_files = ["README.rdoc"]
14
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/extconf.rb", "ext/json/ext/generator/generator.c", "ext/json/ext/generator/generator.h", "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/light_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_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.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 = ["ext/json/ext", "ext", "lib"]
18
18
  s.rubyforge_project = "json"
19
- s.rubygems_version = "1.8.23"
19
+ s.rubygems_version = "1.8.25"
20
20
  s.summary = "JSON Implementation for Ruby"
21
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.rb"]
22
22
 
data/json_pure.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "json_pure"
5
- s.version = "1.6.7"
5
+ s.version = "1.6.8"
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-04-28"
9
+ s.date = "2013-02-10"
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"]
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
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
- s.rubygems_version = "1.8.23"
18
+ s.rubygems_version = "1.8.25"
19
19
  s.summary = "JSON Implementation for Ruby"
20
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.rb"]
21
21
 
data/lib/json/common.rb CHANGED
@@ -293,21 +293,28 @@ module JSON
293
293
  attr_accessor :load_default_options
294
294
  end
295
295
  self.load_default_options = {
296
- :max_nesting => false,
297
- :allow_nan => true,
298
- :quirks_mode => true,
296
+ :max_nesting => false,
297
+ :allow_nan => true,
298
+ :quirks_mode => true,
299
+ :create_additions => true,
299
300
  }
300
301
 
301
302
  # Load a ruby data structure from a JSON _source_ and return it. A source can
302
303
  # either be a string-like object, an IO-like object, or an object responding
303
304
  # to the read method. If _proc_ was given, it will be called with any nested
304
- # Ruby object as an argument recursively in depth first order. The default
305
- # options for the parser can be changed via the load_default_options method.
305
+ # Ruby object as an argument recursively in depth first order. To modify the
306
+ # default options pass in the optional _options_ argument as well.
307
+ #
308
+ # BEWARE: This method is meant to serialise data from trusted user input,
309
+ # like from your own database server or clients under your control, it could
310
+ # be dangerous to allow untrusted users to pass JSON sources into it. The
311
+ # default options for the parser can be changed via the load_default_options
312
+ # method.
306
313
  #
307
314
  # This method is part of the implementation of the load/dump interface of
308
315
  # Marshal and YAML.
309
- def load(source, proc = nil)
310
- opts = load_default_options
316
+ def load(source, proc = nil, options = {})
317
+ opts = load_default_options.merge options
311
318
  if source.respond_to? :to_str
312
319
  source = source.to_str
313
320
  elsif source.respond_to? :to_io
@@ -63,9 +63,9 @@ module JSON
63
63
  # * *symbolize_names*: If set to true, returns symbols for the names
64
64
  # (keys) in a JSON object. Otherwise strings are returned, which is also
65
65
  # the default.
66
- # * *create_additions*: If set to false, the Parser doesn't create
67
- # additions even if a matchin class and create_id was found. This option
68
- # defaults to true.
66
+ # * *create_additions*: If set to true, the Parser creates
67
+ # additions when if a matching class and create_id was found. This
68
+ # option defaults to false.
69
69
  # * *object_class*: Defaults to Hash
70
70
  # * *array_class*: Defaults to Array
71
71
  # * *quirks_mode*: Enables quirks_mode for parser, that is for example
@@ -88,7 +88,7 @@ module JSON
88
88
  if opts.key?(:create_additions)
89
89
  @create_additions = !!opts[:create_additions]
90
90
  else
91
- @create_additions = true
91
+ @create_additions = false
92
92
  end
93
93
  @create_id = @create_additions ? JSON.create_id : nil
94
94
  @object_class = opts[:object_class] || Hash
data/lib/json/version.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  module JSON
2
2
  # JSON version
3
- VERSION = '1.6.7'
3
+ VERSION = '1.6.8'
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:
data/tests/test_json.rb CHANGED
@@ -329,12 +329,12 @@ class TestJSON < Test::Unit::TestCase
329
329
  def test_generate_core_subclasses_with_new_to_json
330
330
  obj = SubHash2["foo" => SubHash2["bar" => true]]
331
331
  obj_json = JSON(obj)
332
- obj_again = JSON(obj_json)
332
+ obj_again = JSON.parse(obj_json, :create_additions => true)
333
333
  assert_kind_of SubHash2, obj_again
334
334
  assert_kind_of SubHash2, obj_again['foo']
335
335
  assert obj_again['foo']['bar']
336
336
  assert_equal obj, obj_again
337
- assert_equal ["foo"], JSON(JSON(SubArray2["foo"]))
337
+ assert_equal ["foo"], JSON(JSON(SubArray2["foo"]), :create_additions => true)
338
338
  end
339
339
 
340
340
  def test_generate_core_subclasses_with_default_to_json
@@ -493,6 +493,12 @@ EOT
493
493
  assert_equal nil, JSON.load('')
494
494
  end
495
495
 
496
+ def test_load_with_options
497
+ small_hash = JSON("foo" => 'bar')
498
+ symbol_hash = { :foo => 'bar' }
499
+ assert_equal symbol_hash, JSON.load(small_hash, nil, :symbolize_names => true)
500
+ end
501
+
496
502
  def test_dump
497
503
  too_deep = '[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]'
498
504
  assert_equal too_deep, JSON.dump(eval(too_deep))
@@ -73,11 +73,19 @@ class TestJSONAddition < Test::Unit::TestCase
73
73
  a = A.new(666)
74
74
  assert A.json_creatable?
75
75
  json = generate(a)
76
- a_again = JSON.parse(json)
76
+ a_again = JSON.parse(json, :create_additions => true)
77
77
  assert_kind_of a.class, a_again
78
78
  assert_equal a, a_again
79
79
  end
80
80
 
81
+ def test_extended_json_default
82
+ a = A.new(666)
83
+ assert A.json_creatable?
84
+ json = generate(a)
85
+ a_hash = JSON.parse(json)
86
+ assert_kind_of Hash, a_hash
87
+ end
88
+
81
89
  def test_extended_json_disabled
82
90
  a = A.new(666)
83
91
  assert A.json_creatable?
@@ -104,7 +112,7 @@ class TestJSONAddition < Test::Unit::TestCase
104
112
  c = C.new
105
113
  assert !C.json_creatable?
106
114
  json = generate(c)
107
- assert_raises(ArgumentError, NameError) { JSON.parse(json) }
115
+ assert_raises(ArgumentError, NameError) { JSON.parse(json, :create_additions => true) }
108
116
  end
109
117
 
110
118
  def test_raw_strings
@@ -122,7 +130,7 @@ class TestJSONAddition < Test::Unit::TestCase
122
130
  assert_match(/\A\{.*\}\Z/, json)
123
131
  assert_match(/"json_class":"String"/, json)
124
132
  assert_match(/"raw":\[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255\]/, json)
125
- raw_again = JSON.parse(json)
133
+ raw_again = JSON.parse(json, :create_additions => true)
126
134
  assert_equal raw, raw_again
127
135
  end
128
136
 
@@ -130,17 +138,17 @@ class TestJSONAddition < Test::Unit::TestCase
130
138
 
131
139
  def test_core
132
140
  t = Time.now
133
- assert_equal t, JSON(JSON(t))
141
+ assert_equal t, JSON(JSON(t), :create_additions => true)
134
142
  d = Date.today
135
- assert_equal d, JSON(JSON(d))
143
+ assert_equal d, JSON(JSON(d), :create_additions => true)
136
144
  d = DateTime.civil(2007, 6, 14, 14, 57, 10, Rational(1, 12), 2299161)
137
- assert_equal d, JSON(JSON(d))
138
- assert_equal 1..10, JSON(JSON(1..10))
139
- assert_equal 1...10, JSON(JSON(1...10))
140
- assert_equal "a".."c", JSON(JSON("a".."c"))
141
- assert_equal "a"..."c", JSON(JSON("a"..."c"))
145
+ assert_equal d, JSON(JSON(d), :create_additions => true)
146
+ assert_equal 1..10, JSON(JSON(1..10), :create_additions => true)
147
+ assert_equal 1...10, JSON(JSON(1...10), :create_additions => true)
148
+ assert_equal "a".."c", JSON(JSON("a".."c"), :create_additions => true)
149
+ assert_equal "a"..."c", JSON(JSON("a"..."c"), :create_additions => true)
142
150
  s = MyJsonStruct.new 4711, 'foot'
143
- assert_equal s, JSON(JSON(s))
151
+ assert_equal s, JSON(JSON(s), :create_additions => true)
144
152
  struct = Struct.new :foo, :bar
145
153
  s = struct.new 4711, 'foot'
146
154
  assert_raises(JSONError) { JSON(s) }
@@ -148,41 +156,41 @@ class TestJSONAddition < Test::Unit::TestCase
148
156
  raise TypeError, "test me"
149
157
  rescue TypeError => e
150
158
  e_json = JSON.generate e
151
- e_again = JSON e_json
159
+ e_again = JSON e_json, :create_additions => true
152
160
  assert_kind_of TypeError, e_again
153
161
  assert_equal e.message, e_again.message
154
162
  assert_equal e.backtrace, e_again.backtrace
155
163
  end
156
- assert_equal(/foo/, JSON(JSON(/foo/)))
157
- assert_equal(/foo/i, JSON(JSON(/foo/i)))
164
+ assert_equal(/foo/, JSON(JSON(/foo/), :create_additions => true))
165
+ assert_equal(/foo/i, JSON(JSON(/foo/i), :create_additions => true))
158
166
  end
159
167
 
160
168
  def test_utc_datetime
161
169
  now = Time.now
162
- d = DateTime.parse(now.to_s) # usual case
163
- assert_equal d, JSON.parse(d.to_json)
170
+ d = DateTime.parse(now.to_s, :create_additions => true) # usual case
171
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
164
172
  d = DateTime.parse(now.utc.to_s) # of = 0
165
- assert_equal d, JSON.parse(d.to_json)
173
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
166
174
  d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(1,24))
167
- assert_equal d, JSON.parse(d.to_json)
175
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
168
176
  d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
169
- assert_equal d, JSON.parse(d.to_json)
177
+ assert_equal d, JSON.parse(d.to_json, :create_additions => true)
170
178
  end
171
179
 
172
180
  def test_rational_complex
173
- assert_equal Rational(2, 9), JSON(JSON(Rational(2, 9)))
174
- assert_equal Complex(2, 9), JSON(JSON(Complex(2, 9)))
181
+ assert_equal Rational(2, 9), JSON.parse(JSON(Rational(2, 9)), :create_additions => true)
182
+ assert_equal Complex(2, 9), JSON.parse(JSON(Complex(2, 9)), :create_additions => true)
175
183
  end
176
184
 
177
185
  def test_bigdecimal
178
- assert_equal BigDecimal('3.141', 23), JSON(JSON(BigDecimal('3.141', 23)))
179
- assert_equal BigDecimal('3.141', 666), JSON(JSON(BigDecimal('3.141', 666)))
186
+ assert_equal BigDecimal('3.141', 23), JSON(JSON(BigDecimal('3.141', 23)), :create_additions => true)
187
+ assert_equal BigDecimal('3.141', 666), JSON(JSON(BigDecimal('3.141', 666)), :create_additions => true)
180
188
  end
181
189
 
182
190
  def test_ostruct
183
191
  o = OpenStruct.new
184
192
  # XXX this won't work; o.foo = { :bar => true }
185
193
  o.foo = { 'bar' => true }
186
- assert_equal o, JSON(JSON(o))
194
+ assert_equal o, JSON.parse(JSON(o), :create_additions => true)
187
195
  end
188
196
  end
@@ -27,14 +27,13 @@ class TestJSONStringMatching < Test::Unit::TestCase
27
27
  t = TestTime.new
28
28
  t_json = [ t ].to_json
29
29
  assert_equal [ t ],
30
- JSON.parse(t_json,
31
- :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
30
+ JSON.parse(t_json, :create_additions => true,
31
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
32
32
  assert_equal [ t.strftime('%FT%T%z') ],
33
- JSON.parse(t_json,
34
- :match_string => { /\A\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime })
33
+ JSON.parse(t_json, :create_additions => true,
34
+ :match_string => { /\A\d{3}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
35
35
  assert_equal [ t.strftime('%FT%T%z') ],
36
36
  JSON.parse(t_json,
37
- :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\Z/ => TestTime },
38
- :create_additions => false)
37
+ :match_string => { /\A\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}[+-]\d{4}\z/ => TestTime })
39
38
  end
40
39
  end
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.6.7
4
+ version: 1.6.8
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-04-28 00:00:00.000000000 Z
12
+ date: 2013-02-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: permutation
@@ -195,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
195
  version: '0'
196
196
  segments:
197
197
  - 0
198
- hash: 3357543127192015668
198
+ hash: -1822326381843360989
199
199
  required_rubygems_version: !ruby/object:Gem::Requirement
200
200
  none: false
201
201
  requirements:
@@ -204,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
204
204
  version: '0'
205
205
  requirements: []
206
206
  rubyforge_project: json
207
- rubygems_version: 1.8.23
207
+ rubygems_version: 1.8.25
208
208
  signing_key:
209
209
  specification_version: 3
210
210
  summary: JSON Implementation for Ruby