json_pure 2.3.0 → 2.5.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.
Files changed (64) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +55 -0
  3. data/README.md +16 -0
  4. data/VERSION +1 -1
  5. data/json_pure.gemspec +49 -26
  6. data/lib/json.rb +549 -29
  7. data/lib/json/add/complex.rb +0 -1
  8. data/lib/json/add/rational.rb +0 -1
  9. data/lib/json/common.rb +370 -123
  10. data/lib/json/pure/generator.rb +29 -9
  11. data/lib/json/pure/parser.rb +22 -4
  12. data/lib/json/version.rb +1 -1
  13. data/tests/fixtures/fail29.json +1 -0
  14. data/tests/fixtures/fail30.json +1 -0
  15. data/tests/fixtures/fail31.json +1 -0
  16. data/tests/fixtures/fail32.json +1 -0
  17. data/tests/json_addition_test.rb +0 -4
  18. data/tests/json_common_interface_test.rb +43 -0
  19. data/tests/json_fixtures_test.rb +9 -1
  20. data/tests/json_generator_test.rb +16 -38
  21. data/tests/json_parser_test.rb +25 -0
  22. data/tests/lib/core_assertions.rb +763 -0
  23. data/tests/lib/envutil.rb +365 -0
  24. data/tests/lib/find_executable.rb +22 -0
  25. data/tests/lib/helper.rb +4 -0
  26. data/tests/ractor_test.rb +30 -0
  27. data/tests/test_helper.rb +3 -3
  28. metadata +27 -48
  29. data/.gitignore +0 -18
  30. data/.travis.yml +0 -24
  31. data/README-json-jruby.md +0 -33
  32. data/Rakefile +0 -413
  33. data/diagrams/.keep +0 -0
  34. data/ext/json/ext/fbuffer/fbuffer.h +0 -187
  35. data/ext/json/ext/generator/depend +0 -1
  36. data/ext/json/ext/generator/extconf.rb +0 -4
  37. data/ext/json/ext/generator/generator.c +0 -1499
  38. data/ext/json/ext/generator/generator.h +0 -171
  39. data/ext/json/ext/parser/depend +0 -1
  40. data/ext/json/ext/parser/extconf.rb +0 -6
  41. data/ext/json/ext/parser/parser.c +0 -2136
  42. data/ext/json/ext/parser/parser.h +0 -91
  43. data/ext/json/ext/parser/parser.rl +0 -896
  44. data/ext/json/extconf.rb +0 -2
  45. data/install.rb +0 -23
  46. data/java/src/json/ext/ByteListTranscoder.java +0 -166
  47. data/java/src/json/ext/Generator.java +0 -466
  48. data/java/src/json/ext/GeneratorMethods.java +0 -231
  49. data/java/src/json/ext/GeneratorService.java +0 -42
  50. data/java/src/json/ext/GeneratorState.java +0 -490
  51. data/java/src/json/ext/OptionsReader.java +0 -113
  52. data/java/src/json/ext/Parser.java +0 -2362
  53. data/java/src/json/ext/Parser.rl +0 -893
  54. data/java/src/json/ext/ParserService.java +0 -34
  55. data/java/src/json/ext/RuntimeInfo.java +0 -116
  56. data/java/src/json/ext/StringDecoder.java +0 -166
  57. data/java/src/json/ext/StringEncoder.java +0 -111
  58. data/java/src/json/ext/Utils.java +0 -88
  59. data/json-java.gemspec +0 -37
  60. data/json.gemspec +0 -0
  61. data/references/rfc7159.txt +0 -899
  62. data/tools/diff.sh +0 -18
  63. data/tools/fuzz.rb +0 -131
  64. data/tools/server.rb +0 -62
data/.gitignore DELETED
@@ -1,18 +0,0 @@
1
- .*.sw[pon]
2
- *.bundle
3
- coverage
4
- tags
5
- pkg
6
- .nfs.*
7
- .idea
8
- java/Json.iml
9
- Gemfile.lock
10
- .rvmrc
11
- *.rbc
12
- .rbx
13
- .AppleDouble
14
- .DS_Store
15
- */**/Makefile
16
- */**/*.o
17
- .byebug_history
18
- *.log
@@ -1,24 +0,0 @@
1
- # Passes arguments to bundle install (http://gembundler.com/man/bundle-install.1.html)
2
- #bundler_args: --binstubs
3
- language: ruby
4
-
5
- # Specify which ruby versions you wish to run your tests on, each version will be used
6
- rvm:
7
- - 2.0.0
8
- - 2.1
9
- - 2.2
10
- - 2.3
11
- - 2.4
12
- - 2.5
13
- - 2.6
14
- - 2.7.0-preview3
15
- - ruby-head
16
- - jruby
17
- - jruby-9.2.7.0
18
- matrix:
19
- allow_failures:
20
- - rvm: ruby-head
21
- - rvm: jruby
22
- - rvm: jruby-9.2.7.0
23
- script: "bundle exec rake"
24
- sudo: false
@@ -1,33 +0,0 @@
1
- JSON-JRuby
2
- ==========
3
-
4
- JSON-JRuby is a port of Florian Frank's native
5
- [`json` library](http://json.rubyforge.org/) to JRuby.
6
- It aims to be a perfect drop-in replacement for `json_pure`.
7
-
8
-
9
- Development version
10
- ===================
11
-
12
- The latest version is available from the
13
- [Git repository](http://github.com/mernen/json-jruby/tree):
14
-
15
- git clone git://github.com/mernen/json-jruby.git
16
-
17
-
18
- Compiling
19
- =========
20
-
21
- You'll need JRuby version 1.2 or greater to build JSON-JRuby.
22
- Its path must be set on the `jruby.dir` property of
23
- `nbproject/project.properties` (defaults to `../jruby`).
24
-
25
- Additionally, you'll need [Ant](http://ant.apache.org/), and
26
- [Ragel](http://www.cs.queensu.ca/~thurston/ragel/) 6.4 or greater.
27
-
28
- Then, from the folder where the sources are located, type:
29
-
30
- ant clean jar
31
-
32
- to clean any leftovers from previous builds and generate the `.jar` files.
33
- To generate a RubyGem, specify the `gem` action rather than `jar`.
data/Rakefile DELETED
@@ -1,413 +0,0 @@
1
- begin
2
- require 'rubygems/package_task'
3
- rescue LoadError
4
- end
5
-
6
- require 'rbconfig'
7
- include\
8
- begin
9
- RbConfig
10
- rescue NameError
11
- Config
12
- end
13
-
14
- require 'rake/clean'
15
- CLOBBER.include 'doc', 'Gemfile.lock'
16
- CLEAN.include FileList['diagrams/*.*'], 'doc', 'coverage', 'tmp',
17
- FileList["ext/**/{Makefile,mkmf.log}"], 'build', 'dist', FileList['**/*.rbc'],
18
- FileList["{ext,lib}/**/*.{so,bundle,#{CONFIG['DLEXT']},o,obj,pdb,lib,manifest,exp,def,jar,class,dSYM}"],
19
- FileList['java/src/**/*.class']
20
-
21
- require 'rake/testtask'
22
- class UndocumentedTestTask < Rake::TestTask
23
- def desc(*) end
24
- end
25
-
26
- which = lambda { |c|
27
- w = `which #{c}`
28
- break w.chomp unless w.empty?
29
- }
30
-
31
- MAKE = ENV['MAKE'] || %w[gmake make].find(&which)
32
- BUNDLE = ENV['BUNDLE'] || %w[bundle].find(&which)
33
- PKG_NAME = 'json'
34
- PKG_TITLE = 'JSON Implementation for Ruby'
35
- PKG_VERSION = File.read('VERSION').chomp
36
- PKG_FILES = FileList[`git ls-files`.split(/\n/)]
37
-
38
- EXT_ROOT_DIR = 'ext/json/ext'
39
- EXT_PARSER_DIR = "#{EXT_ROOT_DIR}/parser"
40
- EXT_PARSER_DL = "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}"
41
- RAGEL_PATH = "#{EXT_PARSER_DIR}/parser.rl"
42
- EXT_PARSER_SRC = "#{EXT_PARSER_DIR}/parser.c"
43
- EXT_GENERATOR_DIR = "#{EXT_ROOT_DIR}/generator"
44
- EXT_GENERATOR_DL = "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}"
45
- EXT_GENERATOR_SRC = "#{EXT_GENERATOR_DIR}/generator.c"
46
-
47
- JAVA_DIR = "java/src/json/ext"
48
- JAVA_RAGEL_PATH = "#{JAVA_DIR}/Parser.rl"
49
- JAVA_PARSER_SRC = "#{JAVA_DIR}/Parser.java"
50
- JAVA_SOURCES = FileList["#{JAVA_DIR}/*.java"]
51
- JAVA_CLASSES = []
52
- JRUBY_PARSER_JAR = File.expand_path("lib/json/ext/parser.jar")
53
- JRUBY_GENERATOR_JAR = File.expand_path("lib/json/ext/generator.jar")
54
-
55
- RAGEL_CODEGEN = %w[rlcodegen rlgen-cd ragel].find(&which)
56
- RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find(&which)
57
-
58
- desc "Installing library (pure)"
59
- task :install_pure => :version do
60
- ruby 'install.rb'
61
- end
62
-
63
- task :install_ext_really do
64
- sitearchdir = CONFIG["sitearchdir"]
65
- cd 'ext' do
66
- for file in Dir["json/ext/*.#{CONFIG['DLEXT']}"]
67
- d = File.join(sitearchdir, file)
68
- mkdir_p File.dirname(d)
69
- install(file, d)
70
- end
71
- warn " *** Installed EXT ruby library."
72
- end
73
- end
74
-
75
- desc "Installing library (extension)"
76
- task :install_ext => [ :compile, :install_pure, :install_ext_really ]
77
-
78
- desc "Installing library (extension)"
79
- task :install => :install_ext
80
-
81
- if defined?(Gem) and defined?(Gem::PackageTask)
82
- spec_pure = Gem::Specification.new do |s|
83
- s.name = 'json_pure'
84
- s.version = PKG_VERSION
85
- s.summary = PKG_TITLE
86
- s.description = "This is a JSON implementation in pure Ruby."
87
-
88
- s.files = PKG_FILES
89
-
90
- s.require_path = 'lib'
91
- s.add_development_dependency 'rake'
92
- s.add_development_dependency 'test-unit', '~> 2.0'
93
-
94
- s.extra_rdoc_files << 'README.md'
95
- s.rdoc_options <<
96
- '--title' << 'JSON implemention for ruby' << '--main' << 'README.md'
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
- s.required_ruby_version = '>= 1.9'
104
- end
105
-
106
- desc 'Creates a json_pure.gemspec file'
107
- task :gemspec_pure => :version do
108
- File.open('json_pure.gemspec', 'w') do |gemspec|
109
- gemspec.write spec_pure.to_ruby
110
- end
111
- end
112
-
113
- Gem::PackageTask.new(spec_pure) do |pkg|
114
- pkg.need_tar = true
115
- pkg.package_files = PKG_FILES
116
- end
117
-
118
- spec_ext = Gem::Specification.new do |s|
119
- s.name = 'json'
120
- s.version = PKG_VERSION
121
- s.summary = PKG_TITLE
122
- s.description = "This is a JSON implementation as a Ruby extension in C."
123
-
124
- s.files = PKG_FILES
125
-
126
- s.extensions = FileList['ext/**/extconf.rb']
127
-
128
- s.require_path = 'lib'
129
- s.add_development_dependency 'rake'
130
- s.add_development_dependency 'test-unit', '~> 2.0'
131
-
132
- s.extra_rdoc_files << 'README.md'
133
- s.rdoc_options <<
134
- '--title' << 'JSON implemention for Ruby' << '--main' << 'README.md'
135
- s.test_files.concat Dir['./tests/test_*.rb']
136
-
137
- s.author = "Florian Frank"
138
- s.email = "flori@ping.de"
139
- s.homepage = "http://flori.github.com/#{PKG_NAME}"
140
- s.license = 'Ruby'
141
- s.required_ruby_version = '>= 1.9'
142
- end
143
-
144
- desc 'Creates a json.gemspec file'
145
- task :gemspec_ext => :version do
146
- File.open('json.gemspec', 'w') do |gemspec|
147
- gemspec.write spec_ext.to_ruby
148
- end
149
- end
150
-
151
- Gem::PackageTask.new(spec_ext) do |pkg|
152
- pkg.need_tar = true
153
- pkg.package_files = PKG_FILES
154
- end
155
-
156
-
157
- desc 'Create all gemspec files'
158
- task :gemspec => [ :gemspec_pure, :gemspec_ext ]
159
- end
160
-
161
- desc m = "Writing version information for #{PKG_VERSION}"
162
- task :version do
163
- puts m
164
- File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
165
- v.puts <<EOT
166
- # frozen_string_literal: false
167
- module JSON
168
- # JSON version
169
- VERSION = '#{PKG_VERSION}'
170
- VERSION_ARRAY = VERSION.split(/\\./).map { |x| x.to_i } # :nodoc:
171
- VERSION_MAJOR = VERSION_ARRAY[0] # :nodoc:
172
- VERSION_MINOR = VERSION_ARRAY[1] # :nodoc:
173
- VERSION_BUILD = VERSION_ARRAY[2] # :nodoc:
174
- end
175
- EOT
176
- end
177
- end
178
-
179
- task :check_env do
180
- ENV.key?('JSON') or fail "JSON env var is required"
181
- end
182
-
183
- desc "Testing library (pure ruby)"
184
- task :test_pure => [ :clean, :check_env, :do_test_pure ]
185
-
186
- UndocumentedTestTask.new do |t|
187
- t.name = 'do_test_pure'
188
- t.libs << 'lib' << 'tests'
189
- t.test_files = FileList['tests/*_test.rb']
190
- t.verbose = true
191
- t.options = '-v'
192
- end
193
-
194
- desc "Testing library (pure ruby and extension)"
195
- task :test do
196
- sh "env JSON=pure #{BUNDLE} exec rake test_pure" or exit 1
197
- sh "env JSON=ext #{BUNDLE} exec rake test_ext" or exit 1
198
- end
199
-
200
- namespace :gems do
201
- desc 'Install all development gems'
202
- task :install do
203
- sh "#{BUNDLE}"
204
- end
205
- end
206
-
207
- if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
208
- ENV['JAVA_HOME'] ||= [
209
- '/usr/local/java/jdk',
210
- '/usr/lib/jvm/java-6-openjdk',
211
- '/Library/Java/Home',
212
- ].find { |c| File.directory?(c) }
213
- if ENV['JAVA_HOME']
214
- warn " *** JAVA_HOME is set to #{ENV['JAVA_HOME'].inspect}"
215
- ENV['PATH'] = ENV['PATH'].split(/:/).unshift(java_path = "#{ENV['JAVA_HOME']}/bin") * ':'
216
- warn " *** java binaries are assumed to be in #{java_path.inspect}"
217
- else
218
- warn " *** JAVA_HOME was not set or could not be guessed!"
219
- exit 1
220
- end
221
-
222
- file JAVA_PARSER_SRC => JAVA_RAGEL_PATH do
223
- cd JAVA_DIR do
224
- if RAGEL_CODEGEN == 'ragel'
225
- sh "ragel Parser.rl -J -o Parser.java"
226
- else
227
- sh "ragel -x Parser.rl | #{RAGEL_CODEGEN} -J"
228
- end
229
- end
230
- end
231
-
232
- desc "Generate parser for java with ragel"
233
- task :ragel => JAVA_PARSER_SRC
234
-
235
- desc "Delete the ragel generated Java source"
236
- task :ragel_clean do
237
- rm_rf JAVA_PARSER_SRC
238
- end
239
-
240
- JRUBY_JAR = File.join(CONFIG["libdir"], "jruby.jar")
241
- if File.exist?(JRUBY_JAR)
242
- JAVA_SOURCES.each do |src|
243
- classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
244
- obj = src.sub(/\.java\Z/, '.class')
245
- file obj => src do
246
- sh 'javac', '-classpath', classpath, '-source', '1.6', '-target', '1.6', src
247
- end
248
- JAVA_CLASSES << obj
249
- end
250
- else
251
- warn "WARNING: Cannot find jruby in path => Cannot build jruby extension!"
252
- end
253
-
254
- desc "Compiling jruby extension"
255
- task :compile => JAVA_CLASSES
256
-
257
- desc "Package the jruby gem"
258
- task :jruby_gem => :create_jar do
259
- sh 'gem build json-java.gemspec'
260
- mkdir_p 'pkg'
261
- mv "json-#{PKG_VERSION}-java.gem", 'pkg'
262
- end
263
-
264
- desc "Testing library (jruby)"
265
- task :test_ext => [ :check_env, :create_jar, :do_test_ext ]
266
-
267
- UndocumentedTestTask.new do |t|
268
- t.name = 'do_test_ext'
269
- t.libs << 'lib' << 'tests'
270
- t.test_files = FileList['tests/*_test.rb']
271
- t.verbose = true
272
- t.options = '-v'
273
- end
274
-
275
- file JRUBY_PARSER_JAR => :compile do
276
- cd 'java/src' do
277
- parser_classes = FileList[
278
- "json/ext/ByteListTranscoder*.class",
279
- "json/ext/OptionsReader*.class",
280
- "json/ext/Parser*.class",
281
- "json/ext/RuntimeInfo*.class",
282
- "json/ext/StringDecoder*.class",
283
- "json/ext/Utils*.class"
284
- ]
285
- sh 'jar', 'cf', File.basename(JRUBY_PARSER_JAR), *parser_classes
286
- mv File.basename(JRUBY_PARSER_JAR), File.dirname(JRUBY_PARSER_JAR)
287
- end
288
- end
289
-
290
- desc "Create parser jar"
291
- task :create_parser_jar => JRUBY_PARSER_JAR
292
-
293
- file JRUBY_GENERATOR_JAR => :compile do
294
- cd 'java/src' do
295
- generator_classes = FileList[
296
- "json/ext/ByteListTranscoder*.class",
297
- "json/ext/OptionsReader*.class",
298
- "json/ext/Generator*.class",
299
- "json/ext/RuntimeInfo*.class",
300
- "json/ext/StringEncoder*.class",
301
- "json/ext/Utils*.class"
302
- ]
303
- sh 'jar', 'cf', File.basename(JRUBY_GENERATOR_JAR), *generator_classes
304
- mv File.basename(JRUBY_GENERATOR_JAR), File.dirname(JRUBY_GENERATOR_JAR)
305
- end
306
- end
307
-
308
- desc "Create generator jar"
309
- task :create_generator_jar => JRUBY_GENERATOR_JAR
310
-
311
- desc "Create parser and generator jars"
312
- task :create_jar => [ :create_parser_jar, :create_generator_jar ]
313
-
314
- desc "Build all gems and archives for a new release of the jruby extension."
315
- task :build => [ :clean, :version, :jruby_gem ]
316
-
317
- task :release => :build
318
- else
319
- desc "Compiling extension"
320
- task :compile => [ EXT_PARSER_DL, EXT_GENERATOR_DL ]
321
-
322
- file EXT_PARSER_DL => EXT_PARSER_SRC do
323
- cd EXT_PARSER_DIR do
324
- ruby 'extconf.rb'
325
- sh MAKE
326
- end
327
- cp "#{EXT_PARSER_DIR}/parser.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
328
- end
329
-
330
- file EXT_GENERATOR_DL => EXT_GENERATOR_SRC do
331
- cd EXT_GENERATOR_DIR do
332
- ruby 'extconf.rb'
333
- sh MAKE
334
- end
335
- cp "#{EXT_GENERATOR_DIR}/generator.#{CONFIG['DLEXT']}", EXT_ROOT_DIR
336
- end
337
-
338
- desc "Testing library (extension)"
339
- task :test_ext => [ :check_env, :compile, :do_test_ext ]
340
-
341
- UndocumentedTestTask.new do |t|
342
- t.name = 'do_test_ext'
343
- t.libs << 'ext' << 'lib' << 'tests'
344
- t.test_files = FileList['tests/*_test.rb']
345
- t.verbose = true
346
- t.options = '-v'
347
- end
348
-
349
- desc "Generate parser with ragel"
350
- task :ragel => EXT_PARSER_SRC
351
-
352
- desc "Delete the ragel generated C source"
353
- task :ragel_clean do
354
- rm_rf EXT_PARSER_SRC
355
- end
356
-
357
- desc "Update the tags file"
358
- task :tags do
359
- system 'ctags', *Dir['**/*.{rb,c,h,java}']
360
- end
361
-
362
- file EXT_PARSER_SRC => RAGEL_PATH do
363
- cd EXT_PARSER_DIR do
364
- if RAGEL_CODEGEN == 'ragel'
365
- sh "ragel parser.rl -G2 -o parser.c"
366
- else
367
- sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
368
- end
369
- src = File.read("parser.c").gsub(/[ \t]+$/, '')
370
- src.gsub!(/^static const int (JSON_.*=.*);$/, 'enum {\1};')
371
- File.open("parser.c", "w") {|f| f.print src}
372
- end
373
- end
374
-
375
- desc "Generate diagrams of ragel parser (ps)"
376
- task :ragel_dot_ps do
377
- root = 'diagrams'
378
- specs = []
379
- File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
380
- for s in specs
381
- if RAGEL_DOTGEN == 'ragel'
382
- sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tps -o#{root}/#{s}.ps"
383
- else
384
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tps -o#{root}/#{s}.ps"
385
- end
386
- end
387
- end
388
-
389
- desc "Generate diagrams of ragel parser (png)"
390
- task :ragel_dot_png do
391
- root = 'diagrams'
392
- specs = []
393
- File.new(RAGEL_PATH).grep(/^\s*machine\s*(\S+);\s*$/) { specs << $1 }
394
- for s in specs
395
- if RAGEL_DOTGEN == 'ragel'
396
- sh "ragel #{RAGEL_PATH} -S#{s} -p -V | dot -Tpng -o#{root}/#{s}.png"
397
- else
398
- sh "ragel -x #{RAGEL_PATH} -S#{s} | #{RAGEL_DOTGEN} -p|dot -Tpng -o#{root}/#{s}.png"
399
- end
400
- end
401
- end
402
-
403
- desc "Generate diagrams of ragel parser"
404
- task :ragel_dot => [ :ragel_dot_png, :ragel_dot_ps ]
405
-
406
- desc "Build all gems and archives for a new release of json and json_pure."
407
- task :build => [ :clean, :gemspec, :package ]
408
-
409
- task :release => :build
410
- end
411
-
412
- desc "Compile in the the source directory"
413
- task :default => [ :clean, :gemspec, :test ]