json 1.8.3 → 2.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +2 -0
- data/.travis.yml +9 -12
- data/{CHANGES → CHANGES.md} +219 -90
- data/Gemfile +10 -6
- data/{COPYING-json-jruby → LICENSE} +5 -6
- data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
- data/{README.rdoc → README.md} +201 -134
- data/Rakefile +35 -113
- data/VERSION +1 -1
- data/ext/json/ext/fbuffer/fbuffer.h +0 -3
- data/ext/json/ext/generator/generator.c +255 -101
- data/ext/json/ext/generator/generator.h +12 -4
- data/ext/json/ext/parser/extconf.rb +28 -0
- data/ext/json/ext/parser/parser.c +410 -462
- data/ext/json/ext/parser/parser.h +5 -5
- data/ext/json/ext/parser/parser.rl +166 -181
- data/ext/json/extconf.rb +1 -1
- data/java/src/json/ext/ByteListTranscoder.java +1 -2
- data/java/src/json/ext/Generator.java +39 -36
- data/java/src/json/ext/GeneratorMethods.java +1 -2
- data/java/src/json/ext/GeneratorService.java +1 -2
- data/java/src/json/ext/GeneratorState.java +33 -56
- data/java/src/json/ext/OptionsReader.java +2 -3
- data/java/src/json/ext/Parser.java +146 -417
- data/java/src/json/ext/Parser.rl +62 -126
- data/java/src/json/ext/ParserService.java +1 -2
- data/java/src/json/ext/RuntimeInfo.java +1 -6
- data/java/src/json/ext/StringDecoder.java +1 -2
- data/java/src/json/ext/StringEncoder.java +13 -2
- data/java/src/json/ext/Utils.java +1 -2
- data/json-java.gemspec +22 -7
- data/json.gemspec +0 -0
- data/json_pure.gemspec +22 -29
- data/lib/json/add/bigdecimal.rb +3 -2
- data/lib/json/add/complex.rb +4 -4
- data/lib/json/add/core.rb +1 -0
- data/lib/json/add/date.rb +1 -1
- data/lib/json/add/date_time.rb +1 -1
- data/lib/json/add/exception.rb +1 -1
- data/lib/json/add/ostruct.rb +3 -3
- data/lib/json/add/range.rb +1 -1
- data/lib/json/add/rational.rb +3 -3
- data/lib/json/add/regexp.rb +3 -3
- data/lib/json/add/set.rb +29 -0
- data/lib/json/add/struct.rb +1 -1
- data/lib/json/add/symbol.rb +1 -1
- data/lib/json/add/time.rb +1 -1
- data/lib/json/common.rb +350 -152
- data/lib/json/ext.rb +0 -6
- data/lib/json/generic_object.rb +5 -4
- data/lib/json/pure/generator.rb +83 -126
- data/lib/json/pure/parser.rb +62 -84
- data/lib/json/pure.rb +2 -8
- data/lib/json/version.rb +2 -1
- data/lib/json.rb +550 -29
- data/references/rfc7159.txt +899 -0
- data/tests/fixtures/obsolete_fail1.json +1 -0
- data/tests/{test_json_addition.rb → json_addition_test.rb} +28 -25
- data/tests/json_common_interface_test.rb +169 -0
- data/tests/json_encoding_test.rb +107 -0
- data/tests/json_ext_parser_test.rb +15 -0
- data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +13 -8
- data/tests/{test_json_generate.rb → json_generator_test.rb} +134 -39
- data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
- data/tests/json_parser_test.rb +497 -0
- data/tests/json_string_matching_test.rb +38 -0
- data/tests/test_helper.rb +17 -0
- data/tools/diff.sh +18 -0
- data/tools/fuzz.rb +1 -9
- metadata +47 -53
- data/COPYING +0 -58
- data/GPL +0 -340
- data/TODO +0 -1
- data/data/example.json +0 -1
- data/data/index.html +0 -38
- data/data/prototype.js +0 -4184
- data/tests/fixtures/fail1.json +0 -1
- data/tests/setup_variant.rb +0 -11
- data/tests/test_json.rb +0 -553
- data/tests/test_json_encoding.rb +0 -65
- data/tests/test_json_string_matching.rb +0 -39
- data/tests/test_json_unicode.rb +0 -72
data/Rakefile
CHANGED
@@ -23,12 +23,13 @@ class UndocumentedTestTask < Rake::TestTask
|
|
23
23
|
def desc(*) end
|
24
24
|
end
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
which = lambda { |c|
|
27
|
+
w = `which #{c}`
|
28
|
+
break w.chomp unless w.empty?
|
29
|
+
}
|
29
30
|
|
30
|
-
MAKE = ENV['MAKE'] || %w[gmake make].find
|
31
|
-
BUNDLE = ENV['BUNDLE'] || %w[bundle].find
|
31
|
+
MAKE = ENV['MAKE'] || %w[gmake make].find(&which)
|
32
|
+
BUNDLE = ENV['BUNDLE'] || %w[bundle].find(&which)
|
32
33
|
PKG_NAME = 'json'
|
33
34
|
PKG_TITLE = 'JSON Implementation for Ruby'
|
34
35
|
PKG_VERSION = File.read('VERSION').chomp
|
@@ -51,8 +52,8 @@ JAVA_CLASSES = []
|
|
51
52
|
JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
|
52
53
|
JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
|
53
54
|
|
54
|
-
RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find
|
55
|
-
RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find
|
55
|
+
RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find(&which)
|
56
|
+
RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find(&which)
|
56
57
|
|
57
58
|
desc "Installing library (pure)"
|
58
59
|
task :install_pure => :version do
|
@@ -77,90 +78,12 @@ task :install_ext => [ :compile, :install_pure, :install_ext_really ]
|
|
77
78
|
desc "Installing library (extension)"
|
78
79
|
task :install => :install_ext
|
79
80
|
|
80
|
-
if defined?(Gem) and defined?(Gem::PackageTask)
|
81
|
-
spec_pure = Gem::Specification.new do |s|
|
82
|
-
s.name = 'json_pure'
|
83
|
-
s.version = PKG_VERSION
|
84
|
-
s.summary = PKG_TITLE
|
85
|
-
s.description = "This is a JSON implementation in pure Ruby."
|
86
|
-
|
87
|
-
s.files = PKG_FILES
|
88
|
-
|
89
|
-
s.require_path = 'lib'
|
90
|
-
s.add_development_dependency 'permutation'
|
91
|
-
s.add_development_dependency 'sdoc', '~>0.3.16'
|
92
|
-
s.add_development_dependency 'rake', '~>0.9.2'
|
93
|
-
|
94
|
-
s.extra_rdoc_files << 'README.rdoc'
|
95
|
-
s.rdoc_options <<
|
96
|
-
'--title' << 'JSON implemention for ruby' << '--main' << 'README.rdoc'
|
97
|
-
s.test_files.concat Dir['./tests/test_*.rb']
|
98
|
-
|
99
|
-
s.author = "Florian Frank"
|
100
|
-
s.email = "flori@ping.de"
|
101
|
-
s.homepage = "http://flori.github.com/#{PKG_NAME}"
|
102
|
-
s.license = 'Ruby'
|
103
|
-
end
|
104
|
-
|
105
|
-
desc 'Creates a json_pure.gemspec file'
|
106
|
-
task :gemspec_pure => :version do
|
107
|
-
File.open('json_pure.gemspec', 'w') do |gemspec|
|
108
|
-
gemspec.write skip_sdoc(spec_pure.to_ruby)
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
Gem::PackageTask.new(spec_pure) do |pkg|
|
113
|
-
pkg.need_tar = true
|
114
|
-
pkg.package_files = PKG_FILES
|
115
|
-
end
|
116
|
-
|
117
|
-
spec_ext = Gem::Specification.new do |s|
|
118
|
-
s.name = 'json'
|
119
|
-
s.version = PKG_VERSION
|
120
|
-
s.summary = PKG_TITLE
|
121
|
-
s.description = "This is a JSON implementation as a Ruby extension in C."
|
122
|
-
|
123
|
-
s.files = PKG_FILES
|
124
|
-
|
125
|
-
s.extensions = FileList['ext/**/extconf.rb']
|
126
|
-
|
127
|
-
s.require_path = 'lib'
|
128
|
-
s.add_development_dependency 'permutation'
|
129
|
-
s.add_development_dependency 'sdoc', '~>0.3.16'
|
130
|
-
|
131
|
-
s.extra_rdoc_files << 'README.rdoc'
|
132
|
-
s.rdoc_options <<
|
133
|
-
'--title' << 'JSON implemention for Ruby' << '--main' << 'README.rdoc'
|
134
|
-
s.test_files.concat Dir['./tests/test_*.rb']
|
135
|
-
|
136
|
-
s.author = "Florian Frank"
|
137
|
-
s.email = "flori@ping.de"
|
138
|
-
s.homepage = "http://flori.github.com/#{PKG_NAME}"
|
139
|
-
s.license = 'Ruby'
|
140
|
-
end
|
141
|
-
|
142
|
-
desc 'Creates a json.gemspec file'
|
143
|
-
task :gemspec_ext => :version do
|
144
|
-
File.open('json.gemspec', 'w') do |gemspec|
|
145
|
-
gemspec.write skip_sdoc(spec_ext.to_ruby)
|
146
|
-
end
|
147
|
-
end
|
148
|
-
|
149
|
-
Gem::PackageTask.new(spec_ext) do |pkg|
|
150
|
-
pkg.need_tar = true
|
151
|
-
pkg.package_files = PKG_FILES
|
152
|
-
end
|
153
|
-
|
154
|
-
|
155
|
-
desc 'Create all gemspec files'
|
156
|
-
task :gemspec => [ :gemspec_pure, :gemspec_ext ]
|
157
|
-
end
|
158
|
-
|
159
81
|
desc m = "Writing version information for #{PKG_VERSION}"
|
160
82
|
task :version do
|
161
83
|
puts m
|
162
84
|
File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
|
163
85
|
v.puts <<EOT
|
86
|
+
# frozen_string_literal: false
|
164
87
|
module JSON
|
165
88
|
# JSON version
|
166
89
|
VERSION = '#{PKG_VERSION}'
|
@@ -173,22 +96,24 @@ EOT
|
|
173
96
|
end
|
174
97
|
end
|
175
98
|
|
99
|
+
task :check_env do
|
100
|
+
ENV.key?('JSON') or fail "JSON env var is required"
|
101
|
+
end
|
102
|
+
|
176
103
|
desc "Testing library (pure ruby)"
|
177
|
-
task :test_pure => [ :
|
104
|
+
task :test_pure => [ :set_env_pure, :check_env, :do_test_pure ]
|
105
|
+
task(:set_env_pure) { ENV['JSON'] = 'pure' }
|
178
106
|
|
179
107
|
UndocumentedTestTask.new do |t|
|
180
108
|
t.name = 'do_test_pure'
|
181
|
-
t.libs << 'lib'
|
182
|
-
t.test_files = FileList['tests
|
109
|
+
t.libs << 'lib' << 'tests'
|
110
|
+
t.test_files = FileList['tests/*_test.rb']
|
183
111
|
t.verbose = true
|
184
112
|
t.options = '-v'
|
185
113
|
end
|
186
114
|
|
187
115
|
desc "Testing library (pure ruby and extension)"
|
188
|
-
task :test
|
189
|
-
sh "env JSON=pure #{BUNDLE} exec rake test_pure" or exit 1
|
190
|
-
sh "env JSON=ext #{BUNDLE} exec rake test_ext" or exit 1
|
191
|
-
end
|
116
|
+
task :test => [ :test_pure, :test_ext ]
|
192
117
|
|
193
118
|
namespace :gems do
|
194
119
|
desc 'Install all development gems'
|
@@ -198,13 +123,11 @@ namespace :gems do
|
|
198
123
|
end
|
199
124
|
|
200
125
|
if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
ENV['JAVA_HOME'] = local_java
|
207
|
-
end
|
126
|
+
ENV['JAVA_HOME'] ||= [
|
127
|
+
'/usr/local/java/jdk',
|
128
|
+
'/usr/lib/jvm/java-6-openjdk',
|
129
|
+
'/Library/Java/Home',
|
130
|
+
].find { |c| File.directory?(c) }
|
208
131
|
if ENV['JAVA_HOME']
|
209
132
|
warn " *** JAVA_HOME is set to #{ENV['JAVA_HOME'].inspect}"
|
210
133
|
ENV['PATH'] = ENV['PATH'].split(/:/).unshift(java_path = "#{ENV['JAVA_HOME']}/bin") * ':'
|
@@ -238,7 +161,7 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
|
|
238
161
|
classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
|
239
162
|
obj = src.sub(/\.java\Z/, '.class')
|
240
163
|
file obj => src do
|
241
|
-
sh 'javac', '-classpath', classpath, '-source', '1.
|
164
|
+
sh 'javac', '-classpath', classpath, '-source', '1.6', '-target', '1.6', src
|
242
165
|
end
|
243
166
|
JAVA_CLASSES << obj
|
244
167
|
end
|
@@ -257,12 +180,13 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
|
|
257
180
|
end
|
258
181
|
|
259
182
|
desc "Testing library (jruby)"
|
260
|
-
task :test_ext => [ :create_jar, :do_test_ext ]
|
183
|
+
task :test_ext => [ :set_env_ext, :create_jar, :check_env, :do_test_ext ]
|
184
|
+
task(:set_env_ext) { ENV['JSON'] = 'ext' }
|
261
185
|
|
262
186
|
UndocumentedTestTask.new do |t|
|
263
187
|
t.name = 'do_test_ext'
|
264
|
-
t.libs << 'lib'
|
265
|
-
t.test_files = FileList['tests
|
188
|
+
t.libs << 'lib' << 'tests'
|
189
|
+
t.test_files = FileList['tests/*_test.rb']
|
266
190
|
t.verbose = true
|
267
191
|
t.options = '-v'
|
268
192
|
end
|
@@ -331,21 +255,16 @@ else
|
|
331
255
|
end
|
332
256
|
|
333
257
|
desc "Testing library (extension)"
|
334
|
-
task :test_ext => [ :compile, :do_test_ext ]
|
258
|
+
task :test_ext => [ :check_env, :compile, :do_test_ext ]
|
335
259
|
|
336
260
|
UndocumentedTestTask.new do |t|
|
337
261
|
t.name = 'do_test_ext'
|
338
|
-
t.libs << 'ext' << 'lib'
|
339
|
-
t.test_files = FileList['tests
|
262
|
+
t.libs << 'ext' << 'lib' << 'tests'
|
263
|
+
t.test_files = FileList['tests/*_test.rb']
|
340
264
|
t.verbose = true
|
341
265
|
t.options = '-v'
|
342
266
|
end
|
343
267
|
|
344
|
-
desc "Create RDOC documentation"
|
345
|
-
task :doc => [ :version, EXT_PARSER_SRC ] do
|
346
|
-
sh "sdoc -o doc -t '#{PKG_TITLE}' -m README.rdoc README.rdoc lib/json.rb #{FileList['lib/json/**/*.rb']} #{EXT_PARSER_SRC} #{EXT_GENERATOR_SRC}"
|
347
|
-
end
|
348
|
-
|
349
268
|
desc "Generate parser with ragel"
|
350
269
|
task :ragel => EXT_PARSER_SRC
|
351
270
|
|
@@ -367,6 +286,9 @@ else
|
|
367
286
|
sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
|
368
287
|
end
|
369
288
|
src = File.read("parser.c").gsub(/[ \t]+$/, '')
|
289
|
+
src.gsub!(/^static const int (JSON_.*=.*);$/, 'enum {\1};')
|
290
|
+
src.gsub!(/0 <= \(\*p\) && \(\*p\) <= 31/, "0 <= (signed char)(*p) && (*p) <= 31")
|
291
|
+
src[0, 0] = "/* This file is automatically generated from parser.rl by using ragel */"
|
370
292
|
File.open("parser.c", "w") {|f| f.print src}
|
371
293
|
end
|
372
294
|
end
|
@@ -409,4 +331,4 @@ else
|
|
409
331
|
end
|
410
332
|
|
411
333
|
desc "Compile in the the source directory"
|
412
|
-
task :default => [ :clean, :
|
334
|
+
task :default => [ :clean, :test ]
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
2.4.0
|