json 1.8.3 → 2.3.0

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 (82) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +2 -0
  3. data/.travis.yml +9 -11
  4. data/{CHANGES → CHANGES.md} +186 -90
  5. data/Gemfile +10 -6
  6. data/{COPYING-json-jruby → LICENSE} +5 -6
  7. data/{README-json-jruby.markdown → README-json-jruby.md} +0 -0
  8. data/{README.rdoc → README.md} +185 -134
  9. data/Rakefile +41 -40
  10. data/VERSION +1 -1
  11. data/ext/json/ext/fbuffer/fbuffer.h +0 -3
  12. data/ext/json/ext/generator/generator.c +142 -101
  13. data/ext/json/ext/generator/generator.h +7 -2
  14. data/ext/json/ext/parser/extconf.rb +3 -0
  15. data/ext/json/ext/parser/parser.c +383 -463
  16. data/ext/json/ext/parser/parser.h +4 -5
  17. data/ext/json/ext/parser/parser.rl +141 -184
  18. data/ext/json/extconf.rb +0 -1
  19. data/java/src/json/ext/ByteListTranscoder.java +1 -2
  20. data/java/src/json/ext/Generator.java +44 -22
  21. data/java/src/json/ext/GeneratorMethods.java +1 -2
  22. data/java/src/json/ext/GeneratorService.java +1 -2
  23. data/java/src/json/ext/GeneratorState.java +3 -56
  24. data/java/src/json/ext/OptionsReader.java +2 -3
  25. data/java/src/json/ext/Parser.java +132 -415
  26. data/java/src/json/ext/Parser.rl +48 -124
  27. data/java/src/json/ext/ParserService.java +1 -2
  28. data/java/src/json/ext/RuntimeInfo.java +1 -6
  29. data/java/src/json/ext/StringDecoder.java +1 -2
  30. data/java/src/json/ext/StringEncoder.java +5 -0
  31. data/java/src/json/ext/Utils.java +1 -2
  32. data/json-java.gemspec +16 -2
  33. data/json.gemspec +0 -0
  34. data/json_pure.gemspec +24 -26
  35. data/lib/json/add/bigdecimal.rb +3 -2
  36. data/lib/json/add/complex.rb +4 -3
  37. data/lib/json/add/core.rb +1 -0
  38. data/lib/json/add/date.rb +1 -1
  39. data/lib/json/add/date_time.rb +1 -1
  40. data/lib/json/add/exception.rb +1 -1
  41. data/lib/json/add/ostruct.rb +3 -3
  42. data/lib/json/add/range.rb +1 -1
  43. data/lib/json/add/rational.rb +3 -2
  44. data/lib/json/add/regexp.rb +3 -3
  45. data/lib/json/add/set.rb +29 -0
  46. data/lib/json/add/struct.rb +1 -1
  47. data/lib/json/add/symbol.rb +1 -1
  48. data/lib/json/add/time.rb +1 -1
  49. data/lib/json/common.rb +26 -54
  50. data/lib/json/ext.rb +0 -6
  51. data/lib/json/generic_object.rb +5 -4
  52. data/lib/json/pure/generator.rb +63 -126
  53. data/lib/json/pure/parser.rb +41 -81
  54. data/lib/json/pure.rb +2 -8
  55. data/lib/json/version.rb +2 -1
  56. data/lib/json.rb +1 -0
  57. data/references/rfc7159.txt +899 -0
  58. data/tests/fixtures/obsolete_fail1.json +1 -0
  59. data/tests/{test_json_addition.rb → json_addition_test.rb} +32 -25
  60. data/tests/json_common_interface_test.rb +126 -0
  61. data/tests/json_encoding_test.rb +107 -0
  62. data/tests/json_ext_parser_test.rb +15 -0
  63. data/tests/{test_json_fixtures.rb → json_fixtures_test.rb} +5 -8
  64. data/tests/{test_json_generate.rb → json_generator_test.rb} +123 -39
  65. data/tests/{test_json_generic_object.rb → json_generic_object_test.rb} +15 -8
  66. data/tests/json_parser_test.rb +472 -0
  67. data/tests/json_string_matching_test.rb +38 -0
  68. data/tests/{setup_variant.rb → test_helper.rb} +6 -0
  69. data/tools/diff.sh +18 -0
  70. data/tools/fuzz.rb +1 -9
  71. metadata +30 -47
  72. data/COPYING +0 -58
  73. data/GPL +0 -340
  74. data/TODO +0 -1
  75. data/data/example.json +0 -1
  76. data/data/index.html +0 -38
  77. data/data/prototype.js +0 -4184
  78. data/tests/fixtures/fail1.json +0 -1
  79. data/tests/test_json.rb +0 -553
  80. data/tests/test_json_encoding.rb +0 -65
  81. data/tests/test_json_string_matching.rb +0 -39
  82. 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
- def skip_sdoc(src)
27
- src.gsub(/^.*sdoc.*/) { |s| s + ' if RUBY_VERSION > "1.8.6"' }
28
- end
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 { |c| system(c, '-v') }
31
- BUNDLE = ENV['BUNDLE'] || %w[bundle].find { |c| system(c, '-v') }
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 { |c| system(c, '-v') }
55
- RAGEL_DOTGEN = %w[rlgen-dot rlgen-cd ragel].find { |c| system(c, '-v') }
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
@@ -87,25 +88,25 @@ if defined?(Gem) and defined?(Gem::PackageTask)
87
88
  s.files = PKG_FILES
88
89
 
89
90
  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'
91
+ s.add_development_dependency 'rake'
92
+ s.add_development_dependency 'test-unit', '~> 2.0'
93
93
 
94
- s.extra_rdoc_files << 'README.rdoc'
94
+ s.extra_rdoc_files << 'README.md'
95
95
  s.rdoc_options <<
96
- '--title' << 'JSON implemention for ruby' << '--main' << 'README.rdoc'
96
+ '--title' << 'JSON implemention for ruby' << '--main' << 'README.md'
97
97
  s.test_files.concat Dir['./tests/test_*.rb']
98
98
 
99
99
  s.author = "Florian Frank"
100
100
  s.email = "flori@ping.de"
101
101
  s.homepage = "http://flori.github.com/#{PKG_NAME}"
102
102
  s.license = 'Ruby'
103
+ s.required_ruby_version = '>= 1.9'
103
104
  end
104
105
 
105
106
  desc 'Creates a json_pure.gemspec file'
106
107
  task :gemspec_pure => :version do
107
108
  File.open('json_pure.gemspec', 'w') do |gemspec|
108
- gemspec.write skip_sdoc(spec_pure.to_ruby)
109
+ gemspec.write spec_pure.to_ruby
109
110
  end
110
111
  end
111
112
 
@@ -125,24 +126,25 @@ if defined?(Gem) and defined?(Gem::PackageTask)
125
126
  s.extensions = FileList['ext/**/extconf.rb']
126
127
 
127
128
  s.require_path = 'lib'
128
- s.add_development_dependency 'permutation'
129
- s.add_development_dependency 'sdoc', '~>0.3.16'
129
+ s.add_development_dependency 'rake'
130
+ s.add_development_dependency 'test-unit', '~> 2.0'
130
131
 
131
- s.extra_rdoc_files << 'README.rdoc'
132
+ s.extra_rdoc_files << 'README.md'
132
133
  s.rdoc_options <<
133
- '--title' << 'JSON implemention for Ruby' << '--main' << 'README.rdoc'
134
+ '--title' << 'JSON implemention for Ruby' << '--main' << 'README.md'
134
135
  s.test_files.concat Dir['./tests/test_*.rb']
135
136
 
136
137
  s.author = "Florian Frank"
137
138
  s.email = "flori@ping.de"
138
139
  s.homepage = "http://flori.github.com/#{PKG_NAME}"
139
140
  s.license = 'Ruby'
141
+ s.required_ruby_version = '>= 1.9'
140
142
  end
141
143
 
142
144
  desc 'Creates a json.gemspec file'
143
145
  task :gemspec_ext => :version do
144
146
  File.open('json.gemspec', 'w') do |gemspec|
145
- gemspec.write skip_sdoc(spec_ext.to_ruby)
147
+ gemspec.write spec_ext.to_ruby
146
148
  end
147
149
  end
148
150
 
@@ -161,6 +163,7 @@ task :version do
161
163
  puts m
162
164
  File.open(File.join('lib', 'json', 'version.rb'), 'w') do |v|
163
165
  v.puts <<EOT
166
+ # frozen_string_literal: false
164
167
  module JSON
165
168
  # JSON version
166
169
  VERSION = '#{PKG_VERSION}'
@@ -173,13 +176,17 @@ EOT
173
176
  end
174
177
  end
175
178
 
179
+ task :check_env do
180
+ ENV.key?('JSON') or fail "JSON env var is required"
181
+ end
182
+
176
183
  desc "Testing library (pure ruby)"
177
- task :test_pure => [ :clean, :do_test_pure ]
184
+ task :test_pure => [ :clean, :check_env, :do_test_pure ]
178
185
 
179
186
  UndocumentedTestTask.new do |t|
180
187
  t.name = 'do_test_pure'
181
- t.libs << 'lib'
182
- t.test_files = FileList['tests/test_*.rb']
188
+ t.libs << 'lib' << 'tests'
189
+ t.test_files = FileList['tests/*_test.rb']
183
190
  t.verbose = true
184
191
  t.options = '-v'
185
192
  end
@@ -198,13 +205,11 @@ namespace :gems do
198
205
  end
199
206
 
200
207
  if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
201
- if ENV.key?('JAVA_HOME')
202
- warn " *** JAVA_HOME was set to #{ENV['JAVA_HOME'].inspect}"
203
- elsif File.directory?(local_java = '/usr/local/java/jdk') ||
204
- File.directory?(local_java = '/usr/lib/jvm/java-6-openjdk')
205
- then
206
- ENV['JAVA_HOME'] = local_java
207
- end
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) }
208
213
  if ENV['JAVA_HOME']
209
214
  warn " *** JAVA_HOME is set to #{ENV['JAVA_HOME'].inspect}"
210
215
  ENV['PATH'] = ENV['PATH'].split(/:/).unshift(java_path = "#{ENV['JAVA_HOME']}/bin") * ':'
@@ -238,7 +243,7 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
238
243
  classpath = (Dir['java/lib/*.jar'] << 'java/src' << JRUBY_JAR) * ':'
239
244
  obj = src.sub(/\.java\Z/, '.class')
240
245
  file obj => src do
241
- sh 'javac', '-classpath', classpath, '-source', '1.5', '-target', '1.5', src
246
+ sh 'javac', '-classpath', classpath, '-source', '1.6', '-target', '1.6', src
242
247
  end
243
248
  JAVA_CLASSES << obj
244
249
  end
@@ -257,12 +262,12 @@ if defined?(RUBY_ENGINE) and RUBY_ENGINE == 'jruby'
257
262
  end
258
263
 
259
264
  desc "Testing library (jruby)"
260
- task :test_ext => [ :create_jar, :do_test_ext ]
265
+ task :test_ext => [ :check_env, :create_jar, :do_test_ext ]
261
266
 
262
267
  UndocumentedTestTask.new do |t|
263
268
  t.name = 'do_test_ext'
264
- t.libs << 'lib'
265
- t.test_files = FileList['tests/test_*.rb']
269
+ t.libs << 'lib' << 'tests'
270
+ t.test_files = FileList['tests/*_test.rb']
266
271
  t.verbose = true
267
272
  t.options = '-v'
268
273
  end
@@ -331,21 +336,16 @@ else
331
336
  end
332
337
 
333
338
  desc "Testing library (extension)"
334
- task :test_ext => [ :compile, :do_test_ext ]
339
+ task :test_ext => [ :check_env, :compile, :do_test_ext ]
335
340
 
336
341
  UndocumentedTestTask.new do |t|
337
342
  t.name = 'do_test_ext'
338
- t.libs << 'ext' << 'lib'
339
- t.test_files = FileList['tests/test_*.rb']
343
+ t.libs << 'ext' << 'lib' << 'tests'
344
+ t.test_files = FileList['tests/*_test.rb']
340
345
  t.verbose = true
341
346
  t.options = '-v'
342
347
  end
343
348
 
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
349
  desc "Generate parser with ragel"
350
350
  task :ragel => EXT_PARSER_SRC
351
351
 
@@ -367,6 +367,7 @@ else
367
367
  sh "ragel -x parser.rl | #{RAGEL_CODEGEN} -G2"
368
368
  end
369
369
  src = File.read("parser.c").gsub(/[ \t]+$/, '')
370
+ src.gsub!(/^static const int (JSON_.*=.*);$/, 'enum {\1};')
370
371
  File.open("parser.c", "w") {|f| f.print src}
371
372
  end
372
373
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.8.3
1
+ 2.3.0
@@ -12,9 +12,6 @@
12
12
  #define RFLOAT_VALUE(val) (RFLOAT(val)->value)
13
13
  #endif
14
14
 
15
- #ifndef RARRAY_PTR
16
- #define RARRAY_PTR(ARRAY) RARRAY(ARRAY)->ptr
17
- #endif
18
15
  #ifndef RARRAY_LEN
19
16
  #define RARRAY_LEN(ARRAY) RARRAY(ARRAY)->len
20
17
  #endif