json 2.0.3 → 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 (71) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGES.md +66 -0
  3. data/Gemfile +1 -3
  4. data/LICENSE +56 -0
  5. data/README.md +54 -21
  6. data/VERSION +1 -1
  7. data/ext/json/ext/fbuffer/fbuffer.h +0 -3
  8. data/ext/json/ext/generator/generator.c +229 -54
  9. data/ext/json/ext/generator/generator.h +5 -3
  10. data/ext/json/ext/parser/extconf.rb +25 -0
  11. data/ext/json/ext/parser/parser.c +180 -85
  12. data/ext/json/ext/parser/parser.h +2 -0
  13. data/ext/json/ext/parser/parser.rl +104 -9
  14. data/ext/json/extconf.rb +1 -0
  15. data/json.gemspec +0 -0
  16. data/lib/json/add/bigdecimal.rb +2 -2
  17. data/lib/json/add/complex.rb +2 -3
  18. data/lib/json/add/ostruct.rb +1 -1
  19. data/lib/json/add/rational.rb +2 -3
  20. data/lib/json/add/regexp.rb +2 -2
  21. data/lib/json/add/set.rb +29 -0
  22. data/lib/json/common.rb +372 -125
  23. data/lib/json/pure/generator.rb +31 -10
  24. data/lib/json/pure/parser.rb +35 -5
  25. data/lib/json/version.rb +1 -1
  26. data/lib/json.rb +549 -29
  27. data/tests/fixtures/fail29.json +1 -0
  28. data/tests/fixtures/fail30.json +1 -0
  29. data/tests/fixtures/fail31.json +1 -0
  30. data/tests/fixtures/fail32.json +1 -0
  31. data/tests/json_addition_test.rb +6 -0
  32. data/tests/json_common_interface_test.rb +47 -4
  33. data/tests/json_encoding_test.rb +2 -0
  34. data/tests/json_fixtures_test.rb +9 -1
  35. data/tests/json_generator_test.rb +30 -8
  36. data/tests/json_parser_test.rb +43 -12
  37. data/tests/lib/core_assertions.rb +763 -0
  38. data/tests/lib/envutil.rb +365 -0
  39. data/tests/lib/find_executable.rb +22 -0
  40. data/tests/lib/helper.rb +4 -0
  41. data/tests/ractor_test.rb +30 -0
  42. data/tests/test_helper.rb +3 -7
  43. metadata +31 -44
  44. data/.gitignore +0 -17
  45. data/.travis.yml +0 -19
  46. data/README-json-jruby.md +0 -33
  47. data/Rakefile +0 -408
  48. data/data/example.json +0 -1
  49. data/data/index.html +0 -38
  50. data/data/prototype.js +0 -4184
  51. data/diagrams/.keep +0 -0
  52. data/install.rb +0 -23
  53. data/java/src/json/ext/ByteListTranscoder.java +0 -166
  54. data/java/src/json/ext/Generator.java +0 -443
  55. data/java/src/json/ext/GeneratorMethods.java +0 -231
  56. data/java/src/json/ext/GeneratorService.java +0 -42
  57. data/java/src/json/ext/GeneratorState.java +0 -490
  58. data/java/src/json/ext/OptionsReader.java +0 -113
  59. data/java/src/json/ext/Parser.java +0 -2347
  60. data/java/src/json/ext/Parser.rl +0 -878
  61. data/java/src/json/ext/ParserService.java +0 -34
  62. data/java/src/json/ext/RuntimeInfo.java +0 -116
  63. data/java/src/json/ext/StringDecoder.java +0 -166
  64. data/java/src/json/ext/StringEncoder.java +0 -111
  65. data/java/src/json/ext/Utils.java +0 -88
  66. data/json-java.gemspec +0 -38
  67. data/json_pure.gemspec +0 -38
  68. data/references/rfc7159.txt +0 -899
  69. data/tools/diff.sh +0 -18
  70. data/tools/fuzz.rb +0 -131
  71. data/tools/server.rb +0 -62
@@ -0,0 +1,365 @@
1
+ # -*- coding: us-ascii -*-
2
+ # frozen_string_literal: true
3
+ require "open3"
4
+ require "timeout"
5
+ require_relative "find_executable"
6
+ begin
7
+ require 'rbconfig'
8
+ rescue LoadError
9
+ end
10
+ begin
11
+ require "rbconfig/sizeof"
12
+ rescue LoadError
13
+ end
14
+
15
+ module EnvUtil
16
+ def rubybin
17
+ if ruby = ENV["RUBY"]
18
+ return ruby
19
+ end
20
+ ruby = "ruby"
21
+ exeext = RbConfig::CONFIG["EXEEXT"]
22
+ rubyexe = (ruby + exeext if exeext and !exeext.empty?)
23
+ 3.times do
24
+ if File.exist? ruby and File.executable? ruby and !File.directory? ruby
25
+ return File.expand_path(ruby)
26
+ end
27
+ if rubyexe and File.exist? rubyexe and File.executable? rubyexe
28
+ return File.expand_path(rubyexe)
29
+ end
30
+ ruby = File.join("..", ruby)
31
+ end
32
+ if defined?(RbConfig.ruby)
33
+ RbConfig.ruby
34
+ else
35
+ "ruby"
36
+ end
37
+ end
38
+ module_function :rubybin
39
+
40
+ LANG_ENVS = %w"LANG LC_ALL LC_CTYPE"
41
+
42
+ DEFAULT_SIGNALS = Signal.list
43
+ DEFAULT_SIGNALS.delete("TERM") if /mswin|mingw/ =~ RUBY_PLATFORM
44
+
45
+ RUBYLIB = ENV["RUBYLIB"]
46
+
47
+ class << self
48
+ attr_accessor :timeout_scale
49
+ attr_reader :original_internal_encoding, :original_external_encoding,
50
+ :original_verbose, :original_warning
51
+
52
+ def capture_global_values
53
+ @original_internal_encoding = Encoding.default_internal
54
+ @original_external_encoding = Encoding.default_external
55
+ @original_verbose = $VERBOSE
56
+ @original_warning = %i[deprecated experimental].to_h {|i| [i, Warning[i]]} if RUBY_VERSION > "2.7"
57
+ end
58
+ end
59
+
60
+ def apply_timeout_scale(t)
61
+ if scale = EnvUtil.timeout_scale
62
+ t * scale
63
+ else
64
+ t
65
+ end
66
+ end
67
+ module_function :apply_timeout_scale
68
+
69
+ def timeout(sec, klass = nil, message = nil, &blk)
70
+ return yield(sec) if sec == nil or sec.zero?
71
+ sec = apply_timeout_scale(sec)
72
+ Timeout.timeout(sec, klass, message, &blk)
73
+ end
74
+ module_function :timeout
75
+
76
+ def terminate(pid, signal = :TERM, pgroup = nil, reprieve = 1)
77
+ reprieve = apply_timeout_scale(reprieve) if reprieve
78
+
79
+ signals = Array(signal).select do |sig|
80
+ DEFAULT_SIGNALS[sig.to_s] or
81
+ DEFAULT_SIGNALS[Signal.signame(sig)] rescue false
82
+ end
83
+ signals |= [:ABRT, :KILL]
84
+ case pgroup
85
+ when 0, true
86
+ pgroup = -pid
87
+ when nil, false
88
+ pgroup = pid
89
+ end
90
+
91
+ lldb = true if /darwin/ =~ RUBY_PLATFORM
92
+
93
+ while signal = signals.shift
94
+
95
+ if lldb and [:ABRT, :KILL].include?(signal)
96
+ lldb = false
97
+ # sudo -n: --non-interactive
98
+ # lldb -p: attach
99
+ # -o: run command
100
+ system(*%W[sudo -n lldb -p #{pid} --batch -o bt\ all -o call\ rb_vmdebug_stack_dump_all_threads() -o quit])
101
+ true
102
+ end
103
+
104
+ begin
105
+ Process.kill signal, pgroup
106
+ rescue Errno::EINVAL
107
+ next
108
+ rescue Errno::ESRCH
109
+ break
110
+ end
111
+ if signals.empty? or !reprieve
112
+ Process.wait(pid)
113
+ else
114
+ begin
115
+ Timeout.timeout(reprieve) {Process.wait(pid)}
116
+ rescue Timeout::Error
117
+ else
118
+ break
119
+ end
120
+ end
121
+ end
122
+ $?
123
+ end
124
+ module_function :terminate
125
+
126
+ def invoke_ruby(args, stdin_data = "", capture_stdout = false, capture_stderr = false,
127
+ encoding: nil, timeout: 10, reprieve: 1, timeout_error: Timeout::Error,
128
+ stdout_filter: nil, stderr_filter: nil,
129
+ signal: :TERM,
130
+ rubybin: EnvUtil.rubybin, precommand: nil,
131
+ **opt)
132
+ timeout = apply_timeout_scale(timeout)
133
+
134
+ in_c, in_p = IO.pipe
135
+ out_p, out_c = IO.pipe if capture_stdout
136
+ err_p, err_c = IO.pipe if capture_stderr && capture_stderr != :merge_to_stdout
137
+ opt[:in] = in_c
138
+ opt[:out] = out_c if capture_stdout
139
+ opt[:err] = capture_stderr == :merge_to_stdout ? out_c : err_c if capture_stderr
140
+ if encoding
141
+ out_p.set_encoding(encoding) if out_p
142
+ err_p.set_encoding(encoding) if err_p
143
+ end
144
+ c = "C"
145
+ child_env = {}
146
+ LANG_ENVS.each {|lc| child_env[lc] = c}
147
+ if Array === args and Hash === args.first
148
+ child_env.update(args.shift)
149
+ end
150
+ if RUBYLIB and lib = child_env["RUBYLIB"]
151
+ child_env["RUBYLIB"] = [lib, RUBYLIB].join(File::PATH_SEPARATOR)
152
+ end
153
+ child_env['ASAN_OPTIONS'] = ENV['ASAN_OPTIONS'] if ENV['ASAN_OPTIONS']
154
+ args = [args] if args.kind_of?(String)
155
+ pid = spawn(child_env, *precommand, rubybin, *args, **opt)
156
+ in_c.close
157
+ out_c&.close
158
+ out_c = nil
159
+ err_c&.close
160
+ err_c = nil
161
+ if block_given?
162
+ return yield in_p, out_p, err_p, pid
163
+ else
164
+ th_stdout = Thread.new { out_p.read } if capture_stdout
165
+ th_stderr = Thread.new { err_p.read } if capture_stderr && capture_stderr != :merge_to_stdout
166
+ in_p.write stdin_data.to_str unless stdin_data.empty?
167
+ in_p.close
168
+ if (!th_stdout || th_stdout.join(timeout)) && (!th_stderr || th_stderr.join(timeout))
169
+ timeout_error = nil
170
+ else
171
+ status = terminate(pid, signal, opt[:pgroup], reprieve)
172
+ terminated = Time.now
173
+ end
174
+ stdout = th_stdout.value if capture_stdout
175
+ stderr = th_stderr.value if capture_stderr && capture_stderr != :merge_to_stdout
176
+ out_p.close if capture_stdout
177
+ err_p.close if capture_stderr && capture_stderr != :merge_to_stdout
178
+ status ||= Process.wait2(pid)[1]
179
+ stdout = stdout_filter.call(stdout) if stdout_filter
180
+ stderr = stderr_filter.call(stderr) if stderr_filter
181
+ if timeout_error
182
+ bt = caller_locations
183
+ msg = "execution of #{bt.shift.label} expired timeout (#{timeout} sec)"
184
+ msg = failure_description(status, terminated, msg, [stdout, stderr].join("\n"))
185
+ raise timeout_error, msg, bt.map(&:to_s)
186
+ end
187
+ return stdout, stderr, status
188
+ end
189
+ ensure
190
+ [th_stdout, th_stderr].each do |th|
191
+ th.kill if th
192
+ end
193
+ [in_c, in_p, out_c, out_p, err_c, err_p].each do |io|
194
+ io&.close
195
+ end
196
+ [th_stdout, th_stderr].each do |th|
197
+ th.join if th
198
+ end
199
+ end
200
+ module_function :invoke_ruby
201
+
202
+ def verbose_warning
203
+ class << (stderr = "".dup)
204
+ alias write concat
205
+ def flush; end
206
+ end
207
+ stderr, $stderr = $stderr, stderr
208
+ $VERBOSE = true
209
+ yield stderr
210
+ return $stderr
211
+ ensure
212
+ stderr, $stderr = $stderr, stderr
213
+ $VERBOSE = EnvUtil.original_verbose
214
+ EnvUtil.original_warning.each {|i, v| Warning[i] = v}
215
+ end
216
+ module_function :verbose_warning
217
+
218
+ def default_warning
219
+ $VERBOSE = false
220
+ yield
221
+ ensure
222
+ $VERBOSE = EnvUtil.original_verbose
223
+ end
224
+ module_function :default_warning
225
+
226
+ def suppress_warning
227
+ $VERBOSE = nil
228
+ yield
229
+ ensure
230
+ $VERBOSE = EnvUtil.original_verbose
231
+ end
232
+ module_function :suppress_warning
233
+
234
+ def under_gc_stress(stress = true)
235
+ stress, GC.stress = GC.stress, stress
236
+ yield
237
+ ensure
238
+ GC.stress = stress
239
+ end
240
+ module_function :under_gc_stress
241
+
242
+ def with_default_external(enc)
243
+ suppress_warning { Encoding.default_external = enc }
244
+ yield
245
+ ensure
246
+ suppress_warning { Encoding.default_external = EnvUtil.original_external_encoding }
247
+ end
248
+ module_function :with_default_external
249
+
250
+ def with_default_internal(enc)
251
+ suppress_warning { Encoding.default_internal = enc }
252
+ yield
253
+ ensure
254
+ suppress_warning { Encoding.default_internal = EnvUtil.original_internal_encoding }
255
+ end
256
+ module_function :with_default_internal
257
+
258
+ def labeled_module(name, &block)
259
+ Module.new do
260
+ singleton_class.class_eval {
261
+ define_method(:to_s) {name}
262
+ alias inspect to_s
263
+ alias name to_s
264
+ }
265
+ class_eval(&block) if block
266
+ end
267
+ end
268
+ module_function :labeled_module
269
+
270
+ def labeled_class(name, superclass = Object, &block)
271
+ Class.new(superclass) do
272
+ singleton_class.class_eval {
273
+ define_method(:to_s) {name}
274
+ alias inspect to_s
275
+ alias name to_s
276
+ }
277
+ class_eval(&block) if block
278
+ end
279
+ end
280
+ module_function :labeled_class
281
+
282
+ if /darwin/ =~ RUBY_PLATFORM
283
+ DIAGNOSTIC_REPORTS_PATH = File.expand_path("~/Library/Logs/DiagnosticReports")
284
+ DIAGNOSTIC_REPORTS_TIMEFORMAT = '%Y-%m-%d-%H%M%S'
285
+ @ruby_install_name = RbConfig::CONFIG['RUBY_INSTALL_NAME']
286
+
287
+ def self.diagnostic_reports(signame, pid, now)
288
+ return unless %w[ABRT QUIT SEGV ILL TRAP].include?(signame)
289
+ cmd = File.basename(rubybin)
290
+ cmd = @ruby_install_name if "ruby-runner#{RbConfig::CONFIG["EXEEXT"]}" == cmd
291
+ path = DIAGNOSTIC_REPORTS_PATH
292
+ timeformat = DIAGNOSTIC_REPORTS_TIMEFORMAT
293
+ pat = "#{path}/#{cmd}_#{now.strftime(timeformat)}[-_]*.crash"
294
+ first = true
295
+ 30.times do
296
+ first ? (first = false) : sleep(0.1)
297
+ Dir.glob(pat) do |name|
298
+ log = File.read(name) rescue next
299
+ if /\AProcess:\s+#{cmd} \[#{pid}\]$/ =~ log
300
+ File.unlink(name)
301
+ File.unlink("#{path}/.#{File.basename(name)}.plist") rescue nil
302
+ return log
303
+ end
304
+ end
305
+ end
306
+ nil
307
+ end
308
+ else
309
+ def self.diagnostic_reports(signame, pid, now)
310
+ end
311
+ end
312
+
313
+ def self.failure_description(status, now, message = "", out = "")
314
+ pid = status.pid
315
+ if signo = status.termsig
316
+ signame = Signal.signame(signo)
317
+ sigdesc = "signal #{signo}"
318
+ end
319
+ log = diagnostic_reports(signame, pid, now)
320
+ if signame
321
+ sigdesc = "SIG#{signame} (#{sigdesc})"
322
+ end
323
+ if status.coredump?
324
+ sigdesc = "#{sigdesc} (core dumped)"
325
+ end
326
+ full_message = ''.dup
327
+ message = message.call if Proc === message
328
+ if message and !message.empty?
329
+ full_message << message << "\n"
330
+ end
331
+ full_message << "pid #{pid}"
332
+ full_message << " exit #{status.exitstatus}" if status.exited?
333
+ full_message << " killed by #{sigdesc}" if sigdesc
334
+ if out and !out.empty?
335
+ full_message << "\n" << out.b.gsub(/^/, '| ')
336
+ full_message.sub!(/(?<!\n)\z/, "\n")
337
+ end
338
+ if log
339
+ full_message << "Diagnostic reports:\n" << log.b.gsub(/^/, '| ')
340
+ end
341
+ full_message
342
+ end
343
+
344
+ def self.gc_stress_to_class?
345
+ unless defined?(@gc_stress_to_class)
346
+ _, _, status = invoke_ruby(["-e""exit GC.respond_to?(:add_stress_to_class)"])
347
+ @gc_stress_to_class = status.success?
348
+ end
349
+ @gc_stress_to_class
350
+ end
351
+ end
352
+
353
+ if defined?(RbConfig)
354
+ module RbConfig
355
+ @ruby = EnvUtil.rubybin
356
+ class << self
357
+ undef ruby if method_defined?(:ruby)
358
+ attr_reader :ruby
359
+ end
360
+ dir = File.dirname(ruby)
361
+ CONFIG['bindir'] = dir
362
+ end
363
+ end
364
+
365
+ EnvUtil.capture_global_values
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+ require "rbconfig"
3
+
4
+ module EnvUtil
5
+ def find_executable(cmd, *args)
6
+ exts = RbConfig::CONFIG["EXECUTABLE_EXTS"].split | [RbConfig::CONFIG["EXEEXT"]]
7
+ ENV["PATH"].split(File::PATH_SEPARATOR).each do |path|
8
+ next if path.empty?
9
+ path = File.join(path, cmd)
10
+ exts.each do |ext|
11
+ cmdline = [path + ext, *args]
12
+ begin
13
+ return cmdline if yield(IO.popen(cmdline, "r", err: [:child, :out], &:read))
14
+ rescue
15
+ next
16
+ end
17
+ end
18
+ end
19
+ nil
20
+ end
21
+ module_function :find_executable
22
+ end
@@ -0,0 +1,4 @@
1
+ require "test/unit"
2
+ require_relative "core_assertions"
3
+
4
+ Test::Unit::TestCase.include Test::Unit::CoreAssertions
@@ -0,0 +1,30 @@
1
+ # encoding: utf-8
2
+ # frozen_string_literal: false
3
+
4
+ require 'test_helper'
5
+
6
+ class JSONInRactorTest < Test::Unit::TestCase
7
+ def test_generate
8
+ assert_separately([], "#{<<~"begin;"}\n#{<<~'end;'}")
9
+ begin;
10
+ $VERBOSE = nil
11
+ require "json"
12
+ r = Ractor.new do
13
+ json = JSON.generate({
14
+ 'a' => 2,
15
+ 'b' => 3.141,
16
+ 'c' => 'c',
17
+ 'd' => [ 1, "b", 3.14 ],
18
+ 'e' => { 'foo' => 'bar' },
19
+ 'g' => "\"\0\037",
20
+ 'h' => 1000.0,
21
+ 'i' => 0.001
22
+ })
23
+ JSON.parse(json)
24
+ end
25
+ expected_json = '{"a":2,"b":3.141,"c":"c","d":[1,"b",3.14],"e":{"foo":"bar"},' +
26
+ '"g":"\\"\\u0000\\u001f","h":1000.0,"i":0.001}'
27
+ assert_equal(JSON.parse(expected_json), r.take)
28
+ end;
29
+ end
30
+ end if defined?(Ractor)
data/tests/test_helper.rb CHANGED
@@ -1,12 +1,12 @@
1
1
  case ENV['JSON']
2
2
  when 'pure'
3
- $:.unshift 'lib'
3
+ $:.unshift File.join(__dir__, '../lib')
4
4
  require 'json/pure'
5
5
  when 'ext'
6
- $:.unshift 'ext', 'lib'
6
+ $:.unshift File.join(__dir__, '../ext'), File.join(__dir__, '../lib')
7
7
  require 'json/ext'
8
8
  else
9
- $:.unshift 'ext', 'lib'
9
+ $:.unshift File.join(__dir__, '../ext'), File.join(__dir__, '../lib')
10
10
  require 'json'
11
11
  end
12
12
 
@@ -15,7 +15,3 @@ begin
15
15
  require 'byebug'
16
16
  rescue LoadError
17
17
  end
18
- if ENV['START_SIMPLECOV'].to_i == 1
19
- require 'simplecov'
20
- SimpleCov.start
21
- end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Florian Frank
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-12 00:00:00.000000000 Z
11
+ date: 2020-12-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -28,16 +28,16 @@ dependencies:
28
28
  name: test-unit
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '2.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '2.0'
40
+ version: '0'
41
41
  description: This is a JSON implementation as a Ruby extension in C.
42
42
  email: flori@ping.de
43
43
  executables: []
@@ -48,19 +48,11 @@ extensions:
48
48
  extra_rdoc_files:
49
49
  - README.md
50
50
  files:
51
- - "./tests/test_helper.rb"
52
- - ".gitignore"
53
- - ".travis.yml"
54
51
  - CHANGES.md
55
52
  - Gemfile
56
- - README-json-jruby.md
53
+ - LICENSE
57
54
  - README.md
58
- - Rakefile
59
55
  - VERSION
60
- - data/example.json
61
- - data/index.html
62
- - data/prototype.js
63
- - diagrams/.keep
64
56
  - ext/json/ext/fbuffer/fbuffer.h
65
57
  - ext/json/ext/generator/depend
66
58
  - ext/json/ext/generator/extconf.rb
@@ -72,23 +64,7 @@ files:
72
64
  - ext/json/ext/parser/parser.h
73
65
  - ext/json/ext/parser/parser.rl
74
66
  - ext/json/extconf.rb
75
- - install.rb
76
- - java/src/json/ext/ByteListTranscoder.java
77
- - java/src/json/ext/Generator.java
78
- - java/src/json/ext/GeneratorMethods.java
79
- - java/src/json/ext/GeneratorService.java
80
- - java/src/json/ext/GeneratorState.java
81
- - java/src/json/ext/OptionsReader.java
82
- - java/src/json/ext/Parser.java
83
- - java/src/json/ext/Parser.rl
84
- - java/src/json/ext/ParserService.java
85
- - java/src/json/ext/RuntimeInfo.java
86
- - java/src/json/ext/StringDecoder.java
87
- - java/src/json/ext/StringEncoder.java
88
- - java/src/json/ext/Utils.java
89
- - json-java.gemspec
90
67
  - json.gemspec
91
- - json_pure.gemspec
92
68
  - lib/json.rb
93
69
  - lib/json/add/bigdecimal.rb
94
70
  - lib/json/add/complex.rb
@@ -100,6 +76,7 @@ files:
100
76
  - lib/json/add/range.rb
101
77
  - lib/json/add/rational.rb
102
78
  - lib/json/add/regexp.rb
79
+ - lib/json/add/set.rb
103
80
  - lib/json/add/struct.rb
104
81
  - lib/json/add/symbol.rb
105
82
  - lib/json/add/time.rb
@@ -111,7 +88,6 @@ files:
111
88
  - lib/json/pure/generator.rb
112
89
  - lib/json/pure/parser.rb
113
90
  - lib/json/version.rb
114
- - references/rfc7159.txt
115
91
  - tests/fixtures/fail10.json
116
92
  - tests/fixtures/fail11.json
117
93
  - tests/fixtures/fail12.json
@@ -128,7 +104,11 @@ files:
128
104
  - tests/fixtures/fail25.json
129
105
  - tests/fixtures/fail27.json
130
106
  - tests/fixtures/fail28.json
107
+ - tests/fixtures/fail29.json
131
108
  - tests/fixtures/fail3.json
109
+ - tests/fixtures/fail30.json
110
+ - tests/fixtures/fail31.json
111
+ - tests/fixtures/fail32.json
132
112
  - tests/fixtures/fail4.json
133
113
  - tests/fixtures/fail5.json
134
114
  - tests/fixtures/fail6.json
@@ -152,18 +132,26 @@ files:
152
132
  - tests/json_generic_object_test.rb
153
133
  - tests/json_parser_test.rb
154
134
  - tests/json_string_matching_test.rb
135
+ - tests/lib/core_assertions.rb
136
+ - tests/lib/envutil.rb
137
+ - tests/lib/find_executable.rb
138
+ - tests/lib/helper.rb
139
+ - tests/ractor_test.rb
155
140
  - tests/test_helper.rb
156
- - tools/diff.sh
157
- - tools/fuzz.rb
158
- - tools/server.rb
159
141
  homepage: http://flori.github.com/json
160
142
  licenses:
161
143
  - Ruby
162
- metadata: {}
163
- post_install_message:
144
+ metadata:
145
+ bug_tracker_uri: https://github.com/flori/json/issues
146
+ changelog_uri: https://github.com/flori/json/blob/master/CHANGES.md
147
+ documentation_uri: http://flori.github.io/json/doc/index.html
148
+ homepage_uri: http://flori.github.io/json/
149
+ source_code_uri: https://github.com/flori/json
150
+ wiki_uri: https://github.com/flori/json/wiki
151
+ post_install_message:
164
152
  rdoc_options:
165
153
  - "--title"
166
- - JSON implemention for Ruby
154
+ - JSON implementation for Ruby
167
155
  - "--main"
168
156
  - README.md
169
157
  require_paths:
@@ -172,17 +160,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
172
160
  requirements:
173
161
  - - ">="
174
162
  - !ruby/object:Gem::Version
175
- version: '1.9'
163
+ version: '2.0'
176
164
  required_rubygems_version: !ruby/object:Gem::Requirement
177
165
  requirements:
178
166
  - - ">="
179
167
  - !ruby/object:Gem::Version
180
168
  version: '0'
181
169
  requirements: []
182
- rubyforge_project:
183
- rubygems_version: 2.6.8
184
- signing_key:
170
+ rubygems_version: 3.2.2
171
+ signing_key:
185
172
  specification_version: 4
186
173
  summary: JSON Implementation for Ruby
187
174
  test_files:
188
- - "./tests/test_helper.rb"
175
+ - tests/test_helper.rb
data/.gitignore DELETED
@@ -1,17 +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
data/.travis.yml DELETED
@@ -1,19 +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
- - 1.9.3
8
- - 2.0.0
9
- - 2.1
10
- - 2.2
11
- - 2.3.3
12
- - 2.4.0
13
- - jruby
14
- - ruby-head
15
- matrix:
16
- allow_failures:
17
- - rvm: ruby-head
18
- script: "bundle exec rake"
19
- sudo: false
data/README-json-jruby.md DELETED
@@ -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`.