json-maglev- 1.5.4 → 1.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGES +11 -1
- data/Rakefile +14 -12
- data/VERSION +1 -1
- data/ext/json/ext/generator/extconf.rb +0 -7
- data/ext/json/ext/generator/generator.c +55 -10
- data/ext/json/ext/generator/generator.h +7 -5
- data/ext/json/ext/parser/extconf.rb +0 -3
- data/ext/json/ext/parser/parser.c +418 -207
- data/ext/json/ext/parser/parser.h +11 -10
- data/ext/json/ext/parser/parser.rl +178 -104
- data/install.rb +1 -8
- data/java/src/json/ext/Generator.java +3 -3
- data/java/src/json/ext/GeneratorMethods.java +2 -2
- data/java/src/json/ext/GeneratorService.java +1 -1
- data/java/src/json/ext/GeneratorState.java +41 -13
- data/java/src/json/ext/OptionsReader.java +1 -1
- data/java/src/json/ext/Parser.java +382 -107
- data/java/src/json/ext/Parser.rl +97 -28
- data/java/src/json/ext/ParserService.java +1 -1
- data/java/src/json/ext/Utils.java +1 -1
- data/json.gemspec +5 -6
- data/json_pure.gemspec +5 -9
- data/lib/json.rb +4 -4
- data/lib/json/add/complex.rb +22 -0
- data/lib/json/add/core.rb +9 -241
- data/lib/json/add/date.rb +34 -0
- data/lib/json/add/date_time.rb +50 -0
- data/lib/json/add/exception.rb +31 -0
- data/lib/json/add/range.rb +29 -0
- data/lib/json/add/rational.rb +22 -0
- data/lib/json/add/regexp.rb +30 -0
- data/lib/json/add/struct.rb +30 -0
- data/lib/json/add/symbol.rb +25 -0
- data/lib/json/add/time.rb +35 -0
- data/lib/json/common.rb +47 -35
- data/lib/json/ext.rb +2 -15
- data/lib/json/pure/generator.rb +17 -2
- data/lib/json/pure/parser.rb +89 -55
- data/lib/json/version.rb +1 -1
- data/tests/test_json.rb +36 -0
- data/tests/test_json_addition.rb +8 -1
- data/tests/test_json_generate.rb +34 -1
- data/tools/server.rb +1 -0
- metadata +20 -24
- data/bin/edit_json.rb +0 -9
- data/bin/prettify_json.rb +0 -48
- data/lib/json/Array.xpm +0 -21
- data/lib/json/FalseClass.xpm +0 -21
- data/lib/json/Hash.xpm +0 -21
- data/lib/json/Key.xpm +0 -73
- data/lib/json/NilClass.xpm +0 -21
- data/lib/json/Numeric.xpm +0 -28
- data/lib/json/String.xpm +0 -96
- data/lib/json/TrueClass.xpm +0 -21
- data/lib/json/add/rails.rb +0 -8
- data/lib/json/editor.rb +0 -1369
- data/lib/json/json.xpm +0 -1499
data/lib/json/ext.rb
CHANGED
@@ -4,21 +4,8 @@ module JSON
|
|
4
4
|
# This module holds all the modules/classes that implement JSON's
|
5
5
|
# functionality as C extensions.
|
6
6
|
module Ext
|
7
|
-
|
8
|
-
|
9
|
-
require 'json/ext/1.9/parser'
|
10
|
-
require 'json/ext/1.9/generator'
|
11
|
-
elsif !defined?(RUBY_ENGINE) && RUBY_VERSION =~ /\A1\.8\./
|
12
|
-
require 'json/ext/1.8/parser'
|
13
|
-
require 'json/ext/1.8/generator'
|
14
|
-
else
|
15
|
-
require 'json/ext/parser'
|
16
|
-
require 'json/ext/generator'
|
17
|
-
end
|
18
|
-
rescue LoadError
|
19
|
-
require 'json/ext/parser'
|
20
|
-
require 'json/ext/generator'
|
21
|
-
end
|
7
|
+
require 'json/ext/parser'
|
8
|
+
require 'json/ext/generator'
|
22
9
|
$DEBUG and warn "Using Ext extension for JSON."
|
23
10
|
JSON.parser = Parser
|
24
11
|
JSON.generator = Generator
|
data/lib/json/pure/generator.rb
CHANGED
@@ -133,6 +133,8 @@ module JSON
|
|
133
133
|
# * *allow_nan*: true if NaN, Infinity, and -Infinity should be
|
134
134
|
# generated, otherwise an exception is thrown, if these values are
|
135
135
|
# encountered. This options defaults to false.
|
136
|
+
# * *quirks_mode*: Enables quirks_mode for parser, that is for example
|
137
|
+
# generating single JSON values instead of documents is possible.
|
136
138
|
def initialize(opts = {})
|
137
139
|
@indent = ''
|
138
140
|
@space = ''
|
@@ -141,6 +143,7 @@ module JSON
|
|
141
143
|
@array_nl = ''
|
142
144
|
@allow_nan = false
|
143
145
|
@ascii_only = false
|
146
|
+
@quirks_mode = false
|
144
147
|
configure opts
|
145
148
|
end
|
146
149
|
|
@@ -165,6 +168,10 @@ module JSON
|
|
165
168
|
# the generated JSON, max_nesting = 0 if no maximum is checked.
|
166
169
|
attr_accessor :max_nesting
|
167
170
|
|
171
|
+
# If this attribute is set to true, quirks mode is enabled, otherwise
|
172
|
+
# it's disabled.
|
173
|
+
attr_accessor :quirks_mode
|
174
|
+
|
168
175
|
# This integer returns the current depth data structure nesting in the
|
169
176
|
# generated JSON.
|
170
177
|
attr_accessor :depth
|
@@ -188,10 +195,17 @@ module JSON
|
|
188
195
|
@allow_nan
|
189
196
|
end
|
190
197
|
|
198
|
+
# Returns true, if only ASCII characters should be generated. Otherwise
|
199
|
+
# returns false.
|
191
200
|
def ascii_only?
|
192
201
|
@ascii_only
|
193
202
|
end
|
194
203
|
|
204
|
+
# Returns true, if quirks mode is enabled. Otherwise returns false.
|
205
|
+
def quirks_mode?
|
206
|
+
@quirks_mode
|
207
|
+
end
|
208
|
+
|
195
209
|
# Configure this State instance with the Hash _opts_, and return
|
196
210
|
# itself.
|
197
211
|
def configure(opts)
|
@@ -203,6 +217,7 @@ module JSON
|
|
203
217
|
@allow_nan = !!opts[:allow_nan] if opts.key?(:allow_nan)
|
204
218
|
@ascii_only = opts[:ascii_only] if opts.key?(:ascii_only)
|
205
219
|
@depth = opts[:depth] || 0
|
220
|
+
@quirks_mode = opts[:quirks_mode] if opts.key?(:quirks_mode)
|
206
221
|
if !opts.key?(:max_nesting) # defaults to 19
|
207
222
|
@max_nesting = 19
|
208
223
|
elsif opts[:max_nesting]
|
@@ -218,7 +233,7 @@ module JSON
|
|
218
233
|
# passed to the configure method.
|
219
234
|
def to_h
|
220
235
|
result = {}
|
221
|
-
for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only depth]
|
236
|
+
for iv in %w[indent space space_before object_nl array_nl allow_nan max_nesting ascii_only quirks_mode depth]
|
222
237
|
result[iv.intern] = instance_variable_get("@#{iv}")
|
223
238
|
end
|
224
239
|
result
|
@@ -229,7 +244,7 @@ module JSON
|
|
229
244
|
# GeneratorError exception.
|
230
245
|
def generate(obj)
|
231
246
|
result = obj.to_json(self)
|
232
|
-
if result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
|
247
|
+
if !@quirks_mode && result !~ /\A\s*(?:\[.*\]|\{.*\})\s*\Z/m
|
233
248
|
raise GeneratorError, "only generation of JSON objects or arrays allowed"
|
234
249
|
end
|
235
250
|
result
|
data/lib/json/pure/parser.rb
CHANGED
@@ -68,42 +68,12 @@ module JSON
|
|
68
68
|
# defaults to true.
|
69
69
|
# * *object_class*: Defaults to Hash
|
70
70
|
# * *array_class*: Defaults to Array
|
71
|
+
# * *quirks_mode*: Enables quirks_mode for parser, that is for example
|
72
|
+
# parsing single JSON values instead of documents is possible.
|
71
73
|
def initialize(source, opts = {})
|
72
74
|
opts ||= {}
|
73
|
-
|
74
|
-
|
75
|
-
b = source[0, 4].bytes.to_a
|
76
|
-
source = case
|
77
|
-
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
78
|
-
source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
|
79
|
-
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
80
|
-
source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
|
81
|
-
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
82
|
-
source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
|
83
|
-
|
84
|
-
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
85
|
-
source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
|
86
|
-
else
|
87
|
-
source.dup
|
88
|
-
end
|
89
|
-
else
|
90
|
-
source = source.encode(::Encoding::UTF_8)
|
91
|
-
end
|
92
|
-
source.force_encoding(::Encoding::ASCII_8BIT)
|
93
|
-
else
|
94
|
-
b = source
|
95
|
-
source = case
|
96
|
-
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
97
|
-
JSON.iconv('utf-8', 'utf-32be', b)
|
98
|
-
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
99
|
-
JSON.iconv('utf-8', 'utf-16be', b)
|
100
|
-
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
101
|
-
JSON.iconv('utf-8', 'utf-32le', b)
|
102
|
-
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
103
|
-
JSON.iconv('utf-8', 'utf-16le', b)
|
104
|
-
else
|
105
|
-
b
|
106
|
-
end
|
75
|
+
unless @quirks_mode = opts[:quirks_mode]
|
76
|
+
source = determine_encoding source
|
107
77
|
end
|
108
78
|
super source
|
109
79
|
if !opts.key?(:max_nesting) # defaults to 19
|
@@ -113,44 +83,108 @@ module JSON
|
|
113
83
|
else
|
114
84
|
@max_nesting = 0
|
115
85
|
end
|
116
|
-
@allow_nan
|
117
|
-
@symbolize_names
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
86
|
+
@allow_nan = !!opts[:allow_nan]
|
87
|
+
@symbolize_names = !!opts[:symbolize_names]
|
88
|
+
if opts.key?(:create_additions)
|
89
|
+
@create_additions = !!opts[:create_additions]
|
90
|
+
else
|
91
|
+
@create_additions = true
|
92
|
+
end
|
93
|
+
@create_id = @create_additions ? JSON.create_id : nil
|
94
|
+
@object_class = opts[:object_class] || Hash
|
95
|
+
@array_class = opts[:array_class] || Array
|
96
|
+
@match_string = opts[:match_string]
|
123
97
|
end
|
124
98
|
|
125
99
|
alias source string
|
126
100
|
|
101
|
+
def quirks_mode?
|
102
|
+
!!@quirks_mode
|
103
|
+
end
|
104
|
+
|
105
|
+
def reset
|
106
|
+
super
|
107
|
+
@current_nesting = 0
|
108
|
+
end
|
109
|
+
|
127
110
|
# Parses the current JSON string _source_ and returns the complete data
|
128
111
|
# structure as a result.
|
129
112
|
def parse
|
130
113
|
reset
|
131
114
|
obj = nil
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
obj = parse_object
|
138
|
-
when scan(ARRAY_OPEN)
|
139
|
-
obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
|
140
|
-
@current_nesting = 1
|
141
|
-
obj = parse_array
|
142
|
-
when skip(IGNORE)
|
143
|
-
;
|
115
|
+
if @quirks_mode
|
116
|
+
while !eos? && skip(IGNORE)
|
117
|
+
end
|
118
|
+
if eos?
|
119
|
+
raise ParserError, "source did not contain any JSON!"
|
144
120
|
else
|
145
|
-
|
121
|
+
obj = parse_value
|
122
|
+
obj == UNPARSED and raise ParserError, "source did not contain any JSON!"
|
146
123
|
end
|
124
|
+
else
|
125
|
+
until eos?
|
126
|
+
case
|
127
|
+
when scan(OBJECT_OPEN)
|
128
|
+
obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
|
129
|
+
@current_nesting = 1
|
130
|
+
obj = parse_object
|
131
|
+
when scan(ARRAY_OPEN)
|
132
|
+
obj and raise ParserError, "source '#{peek(20)}' not in JSON!"
|
133
|
+
@current_nesting = 1
|
134
|
+
obj = parse_array
|
135
|
+
when skip(IGNORE)
|
136
|
+
;
|
137
|
+
else
|
138
|
+
raise ParserError, "source '#{peek(20)}' not in JSON!"
|
139
|
+
end
|
140
|
+
end
|
141
|
+
obj or raise ParserError, "source did not contain any JSON!"
|
147
142
|
end
|
148
|
-
obj or raise ParserError, "source did not contain any JSON!"
|
149
143
|
obj
|
150
144
|
end
|
151
145
|
|
152
146
|
private
|
153
147
|
|
148
|
+
def determine_encoding(source)
|
149
|
+
if defined?(::Encoding)
|
150
|
+
if source.encoding == ::Encoding::ASCII_8BIT
|
151
|
+
b = source[0, 4].bytes.to_a
|
152
|
+
source =
|
153
|
+
case
|
154
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
155
|
+
source.dup.force_encoding(::Encoding::UTF_32BE).encode!(::Encoding::UTF_8)
|
156
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
157
|
+
source.dup.force_encoding(::Encoding::UTF_16BE).encode!(::Encoding::UTF_8)
|
158
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
159
|
+
source.dup.force_encoding(::Encoding::UTF_32LE).encode!(::Encoding::UTF_8)
|
160
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
161
|
+
source.dup.force_encoding(::Encoding::UTF_16LE).encode!(::Encoding::UTF_8)
|
162
|
+
else
|
163
|
+
source.dup
|
164
|
+
end
|
165
|
+
else
|
166
|
+
source = source.encode(::Encoding::UTF_8)
|
167
|
+
end
|
168
|
+
source.force_encoding(::Encoding::ASCII_8BIT)
|
169
|
+
else
|
170
|
+
b = source
|
171
|
+
source =
|
172
|
+
case
|
173
|
+
when b.size >= 4 && b[0] == 0 && b[1] == 0 && b[2] == 0
|
174
|
+
JSON.iconv('utf-8', 'utf-32be', b)
|
175
|
+
when b.size >= 4 && b[0] == 0 && b[2] == 0
|
176
|
+
JSON.iconv('utf-8', 'utf-16be', b)
|
177
|
+
when b.size >= 4 && b[1] == 0 && b[2] == 0 && b[3] == 0
|
178
|
+
JSON.iconv('utf-8', 'utf-32le', b)
|
179
|
+
when b.size >= 4 && b[1] == 0 && b[3] == 0
|
180
|
+
JSON.iconv('utf-8', 'utf-16le', b)
|
181
|
+
else
|
182
|
+
b
|
183
|
+
end
|
184
|
+
end
|
185
|
+
source
|
186
|
+
end
|
187
|
+
|
154
188
|
# Unescape characters in strings.
|
155
189
|
UNESCAPE_MAP = Hash.new { |h, k| h[k] = k.chr }
|
156
190
|
UNESCAPE_MAP.update({
|
data/lib/json/version.rb
CHANGED
data/tests/test_json.rb
CHANGED
@@ -104,6 +104,42 @@ class TC_JSON < Test::Unit::TestCase
|
|
104
104
|
assert_equal({ "a" => 0.23 }, parse(' { "a" : 0.23 } '))
|
105
105
|
end
|
106
106
|
|
107
|
+
def test_parse_json_primitive_values
|
108
|
+
assert_raise(JSON::ParserError) { JSON.parse('') }
|
109
|
+
assert_raise(JSON::ParserError) { JSON.parse('', :quirks_mode => true) }
|
110
|
+
assert_raise(JSON::ParserError) { JSON.parse(' /* foo */ ') }
|
111
|
+
assert_raise(JSON::ParserError) { JSON.parse(' /* foo */ ', :quirks_mode => true) }
|
112
|
+
parser = JSON::Parser.new('null')
|
113
|
+
assert_equal false, parser.quirks_mode?
|
114
|
+
assert_raise(JSON::ParserError) { parser.parse }
|
115
|
+
assert_raise(JSON::ParserError) { JSON.parse('null') }
|
116
|
+
assert_equal nil, JSON.parse('null', :quirks_mode => true)
|
117
|
+
parser = JSON::Parser.new('null', :quirks_mode => true)
|
118
|
+
assert_equal true, parser.quirks_mode?
|
119
|
+
assert_equal nil, parser.parse
|
120
|
+
assert_raise(JSON::ParserError) { JSON.parse('false') }
|
121
|
+
assert_equal false, JSON.parse('false', :quirks_mode => true)
|
122
|
+
assert_raise(JSON::ParserError) { JSON.parse('true') }
|
123
|
+
assert_equal true, JSON.parse('true', :quirks_mode => true)
|
124
|
+
assert_raise(JSON::ParserError) { JSON.parse('23') }
|
125
|
+
assert_equal 23, JSON.parse('23', :quirks_mode => true)
|
126
|
+
assert_raise(JSON::ParserError) { JSON.parse('1') }
|
127
|
+
assert_equal 1, JSON.parse('1', :quirks_mode => true)
|
128
|
+
assert_raise(JSON::ParserError) { JSON.parse('3.141') }
|
129
|
+
assert_in_delta 3.141, JSON.parse('3.141', :quirks_mode => true), 1E-3
|
130
|
+
assert_raise(JSON::ParserError) { JSON.parse('18446744073709551616') }
|
131
|
+
assert_equal 2 ** 64, JSON.parse('18446744073709551616', :quirks_mode => true)
|
132
|
+
assert_raise(JSON::ParserError) { JSON.parse('"foo"') }
|
133
|
+
assert_equal 'foo', JSON.parse('"foo"', :quirks_mode => true)
|
134
|
+
assert_raise(JSON::ParserError) { JSON.parse('NaN', :allow_nan => true) }
|
135
|
+
assert JSON.parse('NaN', :quirks_mode => true, :allow_nan => true).nan?
|
136
|
+
assert_raise(JSON::ParserError) { JSON.parse('Infinity', :allow_nan => true) }
|
137
|
+
assert JSON.parse('Infinity', :quirks_mode => true, :allow_nan => true).infinite?
|
138
|
+
assert_raise(JSON::ParserError) { JSON.parse('-Infinity', :allow_nan => true) }
|
139
|
+
assert JSON.parse('-Infinity', :quirks_mode => true, :allow_nan => true).infinite?
|
140
|
+
assert_raise(JSON::ParserError) { JSON.parse('[ 1, ]', :quirks_mode => true) }
|
141
|
+
end
|
142
|
+
|
107
143
|
if Array.method_defined?(:permutation)
|
108
144
|
def test_parse_more_complex_arrays
|
109
145
|
a = [ nil, false, true, "foßbar", [ "n€st€d", true ], { "nested" => true, "n€ßt€ð2" => {} }]
|
data/tests/test_json_addition.rb
CHANGED
@@ -3,7 +3,9 @@
|
|
3
3
|
|
4
4
|
require 'test/unit'
|
5
5
|
require File.join(File.dirname(__FILE__), 'setup_variant')
|
6
|
-
|
6
|
+
require 'json/add/core'
|
7
|
+
require 'json/add/complex'
|
8
|
+
require 'json/add/rational'
|
7
9
|
require 'date'
|
8
10
|
|
9
11
|
class TC_JSONAddition < Test::Unit::TestCase
|
@@ -164,4 +166,9 @@ class TC_JSONAddition < Test::Unit::TestCase
|
|
164
166
|
d = DateTime.civil(2008, 6, 17, 11, 48, 32, Rational(12,24))
|
165
167
|
assert_equal d, JSON.parse(d.to_json)
|
166
168
|
end
|
169
|
+
|
170
|
+
def test_rational_complex
|
171
|
+
assert_equal Rational(2, 9), JSON(JSON(Rational(2, 9)))
|
172
|
+
assert_equal Complex(2, 9), JSON(JSON(Complex(2, 9)))
|
173
|
+
end
|
167
174
|
end
|
data/tests/test_json_generate.rb
CHANGED
@@ -50,6 +50,7 @@ EOT
|
|
50
50
|
parsed_json = parse(json)
|
51
51
|
assert_equal({"1"=>2}, parsed_json)
|
52
52
|
assert_raise(GeneratorError) { generate(666) }
|
53
|
+
assert_equal '666', generate(666, :quirks_mode => true)
|
53
54
|
end
|
54
55
|
|
55
56
|
def test_generate_pretty
|
@@ -67,6 +68,7 @@ EOT
|
|
67
68
|
parsed_json = parse(json)
|
68
69
|
assert_equal({"1"=>2}, parsed_json)
|
69
70
|
assert_raise(GeneratorError) { pretty_generate(666) }
|
71
|
+
assert_equal '666', pretty_generate(666, :quirks_mode => true)
|
70
72
|
end
|
71
73
|
|
72
74
|
def test_fast_generate
|
@@ -79,9 +81,24 @@ EOT
|
|
79
81
|
parsed_json = parse(json)
|
80
82
|
assert_equal({"1"=>2}, parsed_json)
|
81
83
|
assert_raise(GeneratorError) { fast_generate(666) }
|
84
|
+
assert_equal '666', fast_generate(666, :quirks_mode => true)
|
82
85
|
end
|
83
86
|
|
84
|
-
|
87
|
+
def test_own_state
|
88
|
+
state = State.new
|
89
|
+
json = generate(@hash, state)
|
90
|
+
assert_equal(JSON.parse(@json2), JSON.parse(json))
|
91
|
+
parsed_json = parse(json)
|
92
|
+
assert_equal(@hash, parsed_json)
|
93
|
+
json = generate({1=>2}, state)
|
94
|
+
assert_equal('{"1":2}', json)
|
95
|
+
parsed_json = parse(json)
|
96
|
+
assert_equal({"1"=>2}, parsed_json)
|
97
|
+
assert_raise(GeneratorError) { generate(666, state) }
|
98
|
+
state.quirks_mode = true
|
99
|
+
assert state.quirks_mode?
|
100
|
+
assert_equal '666', generate(666, state)
|
101
|
+
end
|
85
102
|
|
86
103
|
def test_states
|
87
104
|
json = generate({1=>2}, nil)
|
@@ -107,6 +124,7 @@ EOT
|
|
107
124
|
:allow_nan => false,
|
108
125
|
:array_nl => "\n",
|
109
126
|
:ascii_only => false,
|
127
|
+
:quirks_mode => false,
|
110
128
|
:depth => 0,
|
111
129
|
:indent => " ",
|
112
130
|
:max_nesting => 19,
|
@@ -122,6 +140,7 @@ EOT
|
|
122
140
|
:allow_nan => false,
|
123
141
|
:array_nl => "",
|
124
142
|
:ascii_only => false,
|
143
|
+
:quirks_mode => false,
|
125
144
|
:depth => 0,
|
126
145
|
:indent => "",
|
127
146
|
:max_nesting => 19,
|
@@ -137,6 +156,7 @@ EOT
|
|
137
156
|
:allow_nan => false,
|
138
157
|
:array_nl => "",
|
139
158
|
:ascii_only => false,
|
159
|
+
:quirks_mode => false,
|
140
160
|
:depth => 0,
|
141
161
|
:indent => "",
|
142
162
|
:max_nesting => 0,
|
@@ -177,4 +197,17 @@ EOT
|
|
177
197
|
assert_raises(JSON::NestingError) { ary.to_json(s) }
|
178
198
|
assert_equal 19, s.depth
|
179
199
|
end
|
200
|
+
|
201
|
+
def test_gc
|
202
|
+
bignum_too_long_to_embed_as_string = 1234567890123456789012345
|
203
|
+
expect = bignum_too_long_to_embed_as_string.to_s
|
204
|
+
stress, GC.stress = GC.stress, true
|
205
|
+
|
206
|
+
10.times do |i|
|
207
|
+
tmp = bignum_too_long_to_embed_as_string.to_json
|
208
|
+
assert_equal expect, tmp
|
209
|
+
end
|
210
|
+
ensure
|
211
|
+
GC.stress = stress
|
212
|
+
end if GC.respond_to?(:stress=)
|
180
213
|
end
|
data/tools/server.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json-maglev-
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 13
|
5
|
+
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 1.
|
8
|
+
- 6
|
9
|
+
- 1
|
10
|
+
version: 1.6.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Florian Frank
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-09-18 00:00:00 -07:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -62,9 +62,8 @@ dependencies:
|
|
62
62
|
version_requirements: *id003
|
63
63
|
description: This is a JSON implementation as a Ruby extension in C.
|
64
64
|
email: flori@ping.de
|
65
|
-
executables:
|
66
|
-
|
67
|
-
- prettify_json.rb
|
65
|
+
executables: []
|
66
|
+
|
68
67
|
extensions:
|
69
68
|
- ext/json/ext/parser/extconf.rb
|
70
69
|
- ext/json/ext/generator/extconf.rb
|
@@ -150,32 +149,29 @@ files:
|
|
150
149
|
- benchmarks/generator_benchmark.rb
|
151
150
|
- benchmarks/ohai.ruby
|
152
151
|
- benchmarks/ohai.json
|
153
|
-
- lib/json/json.xpm
|
154
|
-
- lib/json/TrueClass.xpm
|
155
152
|
- lib/json/version.rb
|
156
|
-
- lib/json/
|
153
|
+
- lib/json/add/symbol.rb
|
154
|
+
- lib/json/add/struct.rb
|
155
|
+
- lib/json/add/complex.rb
|
156
|
+
- lib/json/add/rational.rb
|
157
|
+
- lib/json/add/exception.rb
|
158
|
+
- lib/json/add/time.rb
|
159
|
+
- lib/json/add/date_time.rb
|
157
160
|
- lib/json/add/core.rb
|
158
|
-
- lib/json/add/
|
161
|
+
- lib/json/add/range.rb
|
162
|
+
- lib/json/add/date.rb
|
163
|
+
- lib/json/add/regexp.rb
|
159
164
|
- lib/json/common.rb
|
160
165
|
- lib/json/pure/generator.rb
|
161
166
|
- lib/json/pure/parser.rb
|
162
167
|
- lib/json/ext.rb
|
163
168
|
- lib/json/pure.rb
|
164
|
-
- lib/json/Key.xpm
|
165
|
-
- lib/json/FalseClass.xpm
|
166
|
-
- lib/json/editor.rb
|
167
|
-
- lib/json/Numeric.xpm
|
168
|
-
- lib/json/NilClass.xpm
|
169
|
-
- lib/json/String.xpm
|
170
|
-
- lib/json/Hash.xpm
|
171
169
|
- lib/json.rb
|
172
170
|
- Gemfile
|
173
171
|
- README.rdoc
|
174
172
|
- json_pure.gemspec
|
175
173
|
- GPL
|
176
174
|
- CHANGES
|
177
|
-
- bin/prettify_json.rb
|
178
|
-
- bin/edit_json.rb
|
179
175
|
- COPYING-json-jruby
|
180
176
|
- ext/json/ext/parser/parser.h
|
181
177
|
- ext/json/ext/parser/extconf.rb
|
@@ -251,9 +247,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
251
247
|
requirements: []
|
252
248
|
|
253
249
|
rubyforge_project: json
|
254
|
-
rubygems_version: 1.
|
250
|
+
rubygems_version: 1.3.7
|
255
251
|
signing_key:
|
256
|
-
specification_version:
|
252
|
+
specification_version: 3
|
257
253
|
summary: JSON Implementation for Ruby
|
258
254
|
test_files:
|
259
255
|
- ./tests/test_json_string_matching.rb
|