oj 3.11.0 → 3.16.5

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 (173) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1421 -0
  3. data/README.md +20 -5
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +48 -38
  6. data/ext/oj/cache.c +329 -0
  7. data/ext/oj/cache.h +22 -0
  8. data/ext/oj/cache8.c +60 -62
  9. data/ext/oj/cache8.h +8 -7
  10. data/ext/oj/circarray.c +35 -35
  11. data/ext/oj/circarray.h +11 -9
  12. data/ext/oj/code.c +156 -174
  13. data/ext/oj/code.h +19 -18
  14. data/ext/oj/compat.c +140 -197
  15. data/ext/oj/custom.c +737 -879
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +830 -835
  18. data/ext/oj/dump.h +65 -53
  19. data/ext/oj/dump_compat.c +566 -642
  20. data/ext/oj/dump_leaf.c +95 -182
  21. data/ext/oj/dump_object.c +518 -659
  22. data/ext/oj/dump_strict.c +301 -334
  23. data/ext/oj/encode.h +3 -4
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +27 -24
  26. data/ext/oj/err.h +38 -13
  27. data/ext/oj/extconf.rb +23 -7
  28. data/ext/oj/fast.c +1043 -1073
  29. data/ext/oj/intern.c +313 -0
  30. data/ext/oj/intern.h +22 -0
  31. data/ext/oj/mem.c +318 -0
  32. data/ext/oj/mem.h +53 -0
  33. data/ext/oj/mimic_json.c +449 -423
  34. data/ext/oj/object.c +530 -576
  35. data/ext/oj/odd.c +155 -138
  36. data/ext/oj/odd.h +24 -22
  37. data/ext/oj/oj.c +1331 -993
  38. data/ext/oj/oj.h +306 -292
  39. data/ext/oj/parse.c +934 -938
  40. data/ext/oj/parse.h +73 -70
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +101 -0
  43. data/ext/oj/rails.c +795 -845
  44. data/ext/oj/rails.h +7 -7
  45. data/ext/oj/reader.c +132 -140
  46. data/ext/oj/reader.h +67 -78
  47. data/ext/oj/resolve.c +40 -59
  48. data/ext/oj/resolve.h +3 -2
  49. data/ext/oj/rxclass.c +67 -67
  50. data/ext/oj/rxclass.h +11 -9
  51. data/ext/oj/saj.c +441 -480
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +78 -111
  55. data/ext/oj/sparse.c +726 -730
  56. data/ext/oj/stream_writer.c +146 -165
  57. data/ext/oj/strict.c +103 -123
  58. data/ext/oj/string_writer.c +241 -253
  59. data/ext/oj/trace.c +29 -33
  60. data/ext/oj/trace.h +41 -11
  61. data/ext/oj/usual.c +1218 -0
  62. data/ext/oj/usual.h +69 -0
  63. data/ext/oj/util.c +103 -103
  64. data/ext/oj/util.h +3 -2
  65. data/ext/oj/val_stack.c +60 -49
  66. data/ext/oj/val_stack.h +79 -85
  67. data/ext/oj/validate.c +46 -0
  68. data/ext/oj/wab.c +307 -350
  69. data/lib/oj/active_support_helper.rb +1 -3
  70. data/lib/oj/bag.rb +8 -1
  71. data/lib/oj/easy_hash.rb +9 -9
  72. data/lib/oj/error.rb +1 -2
  73. data/lib/oj/json.rb +162 -150
  74. data/lib/oj/mimic.rb +9 -19
  75. data/lib/oj/saj.rb +20 -6
  76. data/lib/oj/schandler.rb +5 -4
  77. data/lib/oj/state.rb +12 -8
  78. data/lib/oj/version.rb +1 -2
  79. data/lib/oj.rb +2 -0
  80. data/pages/Compatibility.md +1 -1
  81. data/pages/InstallOptions.md +20 -0
  82. data/pages/JsonGem.md +15 -0
  83. data/pages/Modes.md +8 -3
  84. data/pages/Options.md +43 -5
  85. data/pages/Parser.md +309 -0
  86. data/pages/Rails.md +14 -2
  87. data/test/_test_active.rb +8 -9
  88. data/test/_test_active_mimic.rb +7 -8
  89. data/test/_test_mimic_rails.rb +17 -20
  90. data/test/activerecord/result_test.rb +12 -8
  91. data/test/activesupport6/encoding_test.rb +63 -28
  92. data/test/{activesupport5 → activesupport7}/abstract_unit.rb +16 -12
  93. data/test/{activesupport5 → activesupport7}/decoding_test.rb +2 -10
  94. data/test/{activesupport5 → activesupport7}/encoding_test.rb +86 -50
  95. data/test/{activesupport5 → activesupport7}/encoding_test_cases.rb +6 -0
  96. data/test/{activesupport5 → activesupport7}/time_zone_test_helpers.rb +8 -0
  97. data/test/files.rb +15 -15
  98. data/test/foo.rb +17 -43
  99. data/test/helper.rb +16 -3
  100. data/test/isolated/shared.rb +3 -2
  101. data/test/json_gem/json_addition_test.rb +2 -2
  102. data/test/json_gem/json_common_interface_test.rb +8 -6
  103. data/test/json_gem/json_encoding_test.rb +0 -0
  104. data/test/json_gem/json_ext_parser_test.rb +1 -0
  105. data/test/json_gem/json_fixtures_test.rb +3 -2
  106. data/test/json_gem/json_generator_test.rb +71 -41
  107. data/test/json_gem/json_generic_object_test.rb +11 -11
  108. data/test/json_gem/json_parser_test.rb +54 -47
  109. data/test/json_gem/json_string_matching_test.rb +9 -9
  110. data/test/json_gem/test_helper.rb +12 -0
  111. data/test/mem.rb +34 -0
  112. data/test/perf.rb +22 -27
  113. data/test/perf_compat.rb +31 -33
  114. data/test/perf_dump.rb +50 -0
  115. data/test/perf_fast.rb +80 -82
  116. data/test/perf_file.rb +27 -29
  117. data/test/perf_object.rb +65 -69
  118. data/test/perf_once.rb +59 -0
  119. data/test/perf_parser.rb +183 -0
  120. data/test/perf_saj.rb +46 -54
  121. data/test/perf_scp.rb +58 -69
  122. data/test/perf_simple.rb +41 -39
  123. data/test/perf_strict.rb +74 -82
  124. data/test/perf_wab.rb +67 -69
  125. data/test/prec.rb +5 -5
  126. data/test/sample/change.rb +0 -1
  127. data/test/sample/dir.rb +0 -1
  128. data/test/sample/doc.rb +0 -1
  129. data/test/sample/file.rb +0 -1
  130. data/test/sample/group.rb +0 -1
  131. data/test/sample/hasprops.rb +0 -1
  132. data/test/sample/layer.rb +0 -1
  133. data/test/sample/rect.rb +0 -1
  134. data/test/sample/shape.rb +0 -1
  135. data/test/sample/text.rb +0 -1
  136. data/test/sample.rb +16 -16
  137. data/test/sample_json.rb +8 -8
  138. data/test/test_compat.rb +97 -45
  139. data/test/test_custom.rb +73 -51
  140. data/test/test_debian.rb +7 -10
  141. data/test/test_fast.rb +135 -79
  142. data/test/test_file.rb +41 -30
  143. data/test/test_gc.rb +16 -5
  144. data/test/test_generate.rb +21 -0
  145. data/test/test_hash.rb +15 -5
  146. data/test/test_integer_range.rb +9 -9
  147. data/test/test_null.rb +20 -20
  148. data/test/test_object.rb +99 -96
  149. data/test/test_parser.rb +11 -0
  150. data/test/test_parser_debug.rb +27 -0
  151. data/test/test_parser_saj.rb +337 -0
  152. data/test/test_parser_usual.rb +251 -0
  153. data/test/test_rails.rb +2 -2
  154. data/test/test_saj.rb +10 -8
  155. data/test/test_scp.rb +38 -40
  156. data/test/test_strict.rb +40 -32
  157. data/test/test_various.rb +165 -84
  158. data/test/test_wab.rb +48 -44
  159. data/test/test_writer.rb +47 -47
  160. data/test/tests.rb +13 -5
  161. data/test/tests_mimic.rb +12 -3
  162. data/test/tests_mimic_addition.rb +12 -3
  163. metadata +75 -127
  164. data/ext/oj/hash.c +0 -135
  165. data/ext/oj/hash.h +0 -18
  166. data/ext/oj/hash_test.c +0 -484
  167. data/test/activesupport4/decoding_test.rb +0 -108
  168. data/test/activesupport4/encoding_test.rb +0 -531
  169. data/test/activesupport4/test_helper.rb +0 -41
  170. data/test/activesupport5/test_helper.rb +0 -72
  171. data/test/bar.rb +0 -35
  172. data/test/baz.rb +0 -16
  173. data/test/zoo.rb +0 -13
data/test/perf_strict.rb CHANGED
@@ -1,45 +1,49 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << '.'
5
+ $LOAD_PATH << File.join(__dir__, '../lib')
6
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
7
 
8
8
  require 'optparse'
9
9
  require 'perf'
10
10
  require 'oj'
11
11
 
12
- $verbose = false
13
- $indent = 0
14
- $iter = 20000
15
- $with_bignum = false
16
- $with_nums = true
17
- $size = 0
12
+ @verbose = false
13
+ @indent = 0
14
+ @iter = 20_000
15
+ @with_bignum = false
16
+ @with_nums = true
17
+ @size = 0
18
+ @symbolize = false
19
+ @cache_keys = true
18
20
 
19
21
  opts = OptionParser.new
20
- opts.on("-v", "verbose") { $verbose = true }
21
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
22
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
23
- opts.on("-s", "--size [Int]", Integer, "size (~Kbytes)") { |i| $size = i }
24
- opts.on("-b", "with bignum") { $with_bignum = true }
25
- opts.on("-n", "without numbers") { $with_nums = false }
26
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
27
- files = opts.parse(ARGV)
28
-
29
- if $with_nums
30
- $obj = {
22
+ opts.on('-v', 'verbose') { @verbose = true }
23
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| @iter = i }
24
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| @indent = i }
25
+ opts.on('-s', '--size [Int]', Integer, 'size (~Kbytes)') { |i| @size = i }
26
+ opts.on('-b', 'with bignum') { @with_bignum = true }
27
+ opts.on('-n', 'without numbers') { @with_nums = false }
28
+ opts.on('-z', '--symbolize', 'symbolize keys') { @symbolize = true }
29
+ opts.on('-k', '--no-cache', 'turn off key caching') { @cache_keys = false }
30
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
31
+ opts.parse(ARGV)
32
+
33
+ if @with_nums
34
+ @obj = {
31
35
  'a' => 'Alpha', # string
32
36
  'b' => true, # boolean
33
- 'c' => 12345, # number
34
- 'd' => [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
37
+ 'c' => 12_345, # number
38
+ 'd' => [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
35
39
  'e' => { 'zero' => nil, 'one' => 1, 'two' => 2, 'three' => [3], 'four' => [0, 1, 2, 3, 4] }, # hash
36
40
  'f' => nil, # nil
37
41
  'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
38
42
  'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
39
43
  }
40
- $obj['g'] = 12345678901234567890123456789 if $with_bignum
44
+ @obj['g'] = 12_345_678_901_234_567_890_123_456_789 if @with_bignum
41
45
  else
42
- $obj = {
46
+ @obj = {
43
47
  'a' => 'Alpha',
44
48
  'b' => true,
45
49
  'c' => '12345',
@@ -51,95 +55,83 @@ else
51
55
  }
52
56
  end
53
57
 
54
- Oj.default_options = { :indent => $indent, :mode => :strict }
58
+ Oj.default_options = { :indent => @indent, :mode => :strict, cache_keys: @cache_keys, cache_str: 5 }
55
59
 
56
- if 0 < $size
57
- o = $obj
58
- $obj = []
59
- (4 * $size).times do
60
- $obj << o
60
+ if 0 < @size
61
+ ob = @obj
62
+ @obj = []
63
+ (4 * @size).times do
64
+ @obj << ob
61
65
  end
62
66
  end
63
67
 
64
- $json = Oj.dump($obj)
65
- $obj_json = Oj.dump($obj, :mode => :object)
66
- #puts "*** size: #{$obj_json.size}"
67
- #puts "*** #{$obj_json}"
68
- $failed = {} # key is same as String used in tests later
68
+ @json = Oj.dump(@obj)
69
+ @failed = {} # key is same as String used in tests later
69
70
 
70
71
  def capture_error(tag, orig, load_key, dump_key, &blk)
71
- begin
72
- obj = blk.call(orig)
73
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
74
- rescue Exception => e
75
- $failed[tag] = "#{e.class}: #{e.message}"
76
- end
72
+ obj = blk.call(orig)
73
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
74
+ rescue Exception => e
75
+ @failed[tag] = "#{e.class}: #{e.message}"
77
76
  end
78
77
 
79
78
  # Verify that all packages dump and load correctly and return the same Object as the original.
80
- capture_error('Oj:strict', $obj, 'load', 'dump') { |o| Oj.strict_load(Oj.dump(o, :mode => :strict)) }
81
- capture_error('Yajl', $obj, 'encode', 'parse') { |o| require 'yajl'; Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
82
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o|
79
+ capture_error('Oj:strict', @obj, 'load', 'dump') { |o|
80
+ Oj.strict_load(Oj.dump(o))
81
+ }
82
+ capture_error('Yajl', @obj, 'encode', 'parse') { |o|
83
+ require 'yajl'
84
+ Yajl::Parser.parse(Yajl::Encoder.encode(o))
85
+ }
86
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o|
83
87
  require 'json'
84
88
  require 'json/ext'
85
89
  JSON.generator = JSON::Ext::Generator
86
90
  JSON.parser = JSON::Ext::Parser
87
91
  JSON.parse(JSON.generate(o))
88
92
  }
89
- capture_error('JSON::Pure', $obj, 'generate', 'parse') { |o|
90
- require 'json/pure'
91
- JSON.generator = JSON::Pure::Generator
92
- JSON.parser = JSON::Pure::Parser
93
- JSON.parse(JSON.generate(o))
94
- }
95
93
 
96
- if $verbose
97
- puts "json:\n#{$json}\n"
98
- puts "object json:\n#{$obj_json}\n"
99
- puts "Oj loaded object:\n#{Oj.strict_load($json)}\n"
100
- puts "Yajl loaded object:\n#{Yajl::Parser.parse($json)}\n"
101
- puts "JSON loaded object:\n#{JSON::Ext::Parser.new($json).parse}\n"
94
+ Oj.default_options = { symbol_keys: @symbolize }
95
+
96
+ if @verbose
97
+ puts "json:\n#{@json}\n"
98
+ puts "Oj loaded object:\n#{Oj.strict_load(@json)}\n"
99
+ puts "Yajl loaded object:\n#{Yajl::Parser.parse(@json)}\n"
100
+ puts "JSON loaded object:\n#{JSON::Ext::Parser.new(@json).parse}\n"
102
101
  end
103
102
 
104
103
  puts '-' * 80
105
- puts "Strict Parse Performance"
104
+ puts 'Strict Parse Performance'
106
105
  perf = Perf.new()
107
- unless $failed.has_key?('JSON::Ext')
108
- perf.add('JSON::Ext', 'parse') { JSON.parse($json) }
106
+ unless @failed.key?('JSON::Ext')
107
+ perf.add('JSON::Ext', 'parse') { JSON.parse(@json, symbolize_names: @symbolize) }
109
108
  perf.before('JSON::Ext') { JSON.parser = JSON::Ext::Parser }
110
109
  end
111
- unless $failed.has_key?('JSON::Pure')
112
- perf.add('JSON::Pure', 'parse') { JSON.parse($json) }
113
- perf.before('JSON::Pure') { JSON.parser = JSON::Pure::Parser }
110
+ unless @failed.key?('Oj:strict')
111
+ perf.add('Oj:strict', 'strict_load') { Oj.strict_load(@json) }
112
+ perf.add('Oj:wab', 'wab_load') { Oj.wab_load(@json) }
114
113
  end
115
- unless $failed.has_key?('Oj:strict')
116
- perf.add('Oj:strict', 'strict_load') { Oj.strict_load($json) }
117
- end
118
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
119
- perf.run($iter)
114
+ perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.key?('Yajl')
115
+ perf.run(@iter)
120
116
 
121
117
  puts '-' * 80
122
- puts "Strict Dump Performance"
118
+ puts 'Strict Dump Performance'
123
119
  perf = Perf.new()
124
- unless $failed.has_key?('JSON::Ext')
125
- perf.add('JSON::Ext', 'dump') { JSON.generate($obj) }
120
+ unless @failed.key?('JSON::Ext')
121
+ perf.add('JSON::Ext', 'dump') { JSON.generate(@obj) }
126
122
  perf.before('JSON::Ext') { JSON.generator = JSON::Ext::Generator }
127
123
  end
128
- unless $failed.has_key?('JSON::Pure')
129
- perf.add('JSON::Pure', 'generate') { JSON.generate($obj) }
130
- perf.before('JSON::Pure') { JSON.generator = JSON::Pure::Generator }
131
- end
132
- unless $failed.has_key?('Oj:strict')
133
- perf.add('Oj:strict', 'dump') { Oj.dump($obj, :mode => :strict) }
124
+ unless @failed.key?('Oj:strict')
125
+ perf.add('Oj:strict', 'dump') { Oj.dump(@obj) }
134
126
  end
135
- perf.add('Yajl', 'encode') { Yajl::Encoder.encode($obj) } unless $failed.has_key?('Yajl')
136
- perf.run($iter)
127
+ perf.add('Yajl', 'encode') { Yajl::Encoder.encode(@obj) } unless @failed.key?('Yajl')
128
+ perf.run(@iter)
137
129
 
138
130
  puts
139
131
  puts '-' * 80
140
132
  puts
141
133
 
142
- unless $failed.empty?
143
- puts "The following packages were not included for the reason listed"
144
- $failed.each { |tag,msg| puts "***** #{tag}: #{msg}" }
134
+ unless @failed.empty?
135
+ puts 'The following packages were not included for the reason listed'
136
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
145
137
  end
data/test/perf_wab.rb CHANGED
@@ -1,131 +1,129 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # frozen_string_literal: true
3
3
 
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
4
+ $LOAD_PATH << '.'
5
+ $LOAD_PATH << File.join(__dir__, '../lib')
6
+ $LOAD_PATH << File.join(__dir__, '../ext')
7
7
 
8
8
  require 'optparse'
9
9
  require 'perf'
10
10
  require 'oj'
11
11
 
12
- $verbose = false
13
- $indent = 0
14
- $iter = 20000
15
- $with_bignum = false
16
- $with_nums = true
17
- $size = 0
12
+ @verbose = false
13
+ @indent = 0
14
+ @iter = 20_000
15
+ @with_bignum = false
16
+ @with_nums = true
17
+ @size = 0
18
18
 
19
19
  opts = OptionParser.new
20
- opts.on("-v", "verbose") { $verbose = true }
21
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
22
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
23
- opts.on("-s", "--size [Int]", Integer, "size (~Kbytes)") { |i| $size = i }
24
- opts.on("-b", "with bignum") { $with_bignum = true }
25
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
26
- files = opts.parse(ARGV)
20
+ opts.on('-v', 'verbose') { @verbose = true }
21
+ opts.on('-c', '--count [Int]', Integer, 'iterations') { |i| @iter = i }
22
+ opts.on('-i', '--indent [Int]', Integer, 'indentation') { |i| @indent = i }
23
+ opts.on('-s', '--size [Int]', Integer, 'size (~Kbytes)') { |i| @size = i }
24
+ opts.on('-b', 'with bignum') { @with_bignum = true }
25
+ opts.on('-h', '--help', 'Show this display') { puts opts; Process.exit!(0) }
26
+ opts.parse(ARGV)
27
27
 
28
- $obj = {
28
+ @obj = {
29
29
  a: 'Alpha', # string
30
30
  b: true, # boolean
31
- c: 12345, # number
32
- d: [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
31
+ c: 12_345, # number
32
+ d: [ true, [false, [-123_456_789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
33
33
  e: { zero: nil, one: 1, two: 2, three: [3], four: [0, 1, 2, 3, 4] }, # hash
34
34
  f: nil, # nil
35
35
  h: { a: { b: { c: { d: {e: { f: { g: nil }}}}}}}, # deep hash, not that deep
36
36
  i: [[[[[[[nil]]]]]]] # deep array, again, not that deep
37
37
  }
38
- $obj[:g] = 12345678901234567890123456789 if $with_bignum
38
+ @obj[:g] = 12_345_678_901_234_567_890_123_456_789 if @with_bignum
39
39
 
40
- Oj.default_options = { :indent => $indent, :mode => :wab }
40
+ Oj.default_options = { :indent => @indent, :mode => :wab }
41
41
 
42
- if 0 < $size
43
- o = $obj
44
- $obj = []
45
- (4 * $size).times do
46
- $obj << o
42
+ if 0 < @size
43
+ ob = @obj
44
+ @obj = []
45
+ (4 * @size).times do
46
+ @obj << ob
47
47
  end
48
48
  end
49
49
 
50
- $json = Oj.dump($obj)
51
- $obj_json = Oj.dump($obj, :mode => :object)
52
- #puts "*** size: #{$obj_json.size}"
53
- #puts "*** #{$obj_json}"
54
- $failed = {} # key is same as String used in tests later
50
+ @json = Oj.dump(@obj)
51
+ @obj_json = Oj.dump(@obj, :mode => :object)
52
+ # puts "*** size: #{@obj_json.size}"
53
+ # puts "*** #{@obj_json}"
54
+ @failed = {} # key is same as String used in tests later
55
55
 
56
56
  def capture_error(tag, orig, load_key, dump_key, &blk)
57
- begin
58
- obj = blk.call(orig)
59
- raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
60
- rescue Exception => e
61
- $failed[tag] = "#{e.class}: #{e.message}"
62
- end
57
+ obj = blk.call(orig)
58
+ raise "#{tag} #{dump_key} and #{load_key} did not return the same object as the original." unless orig == obj
59
+ rescue Exception => e
60
+ @failed[tag] = "#{e.class}: #{e.message}"
63
61
  end
64
62
 
65
63
  # Verify that all packages dump and load correctly and return the same Object as the original.
66
- capture_error('Oj:wab', $obj, 'load', 'dump') { |o| Oj.wab_load(Oj.dump(o, :mode => :wab)) }
67
- capture_error('Yajl', $obj, 'encode', 'parse') { |o| require 'yajl'; Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
68
- capture_error('JSON::Ext', $obj, 'generate', 'parse') { |o|
64
+ capture_error('Oj:wab', @obj, 'load', 'dump') { |o| Oj.wab_load(Oj.dump(o, :mode => :wab)) }
65
+ capture_error('Yajl', @obj, 'encode', 'parse') { |o| require 'yajl'; Yajl::Parser.parse(Yajl::Encoder.encode(o)) }
66
+ capture_error('JSON::Ext', @obj, 'generate', 'parse') { |o|
69
67
  require 'json'
70
68
  require 'json/ext'
71
69
  JSON.generator = JSON::Ext::Generator
72
70
  JSON.parser = JSON::Ext::Parser
73
71
  JSON.parse(JSON.generate(o))
74
72
  }
75
- capture_error('JSON::Pure', $obj, 'generate', 'parse') { |o|
73
+ capture_error('JSON::Pure', @obj, 'generate', 'parse') { |o|
76
74
  require 'json/pure'
77
75
  JSON.generator = JSON::Pure::Generator
78
76
  JSON.parser = JSON::Pure::Parser
79
77
  JSON.parse(JSON.generate(o))
80
78
  }
81
79
 
82
- if $verbose
83
- puts "json:\n#{$json}\n"
84
- puts "object json:\n#{$obj_json}\n"
85
- puts "Oj loaded object:\n#{Oj.wab_load($json)}\n"
86
- puts "Yajl loaded object:\n#{Yajl::Parser.parse($json)}\n"
87
- puts "JSON loaded object:\n#{JSON::Ext::Parser.new($json).parse}\n"
80
+ if @verbose
81
+ puts "json:\n#{@json}\n"
82
+ puts "object json:\n#{@obj_json}\n"
83
+ puts "Oj loaded object:\n#{Oj.wab_load(@json)}\n"
84
+ puts "Yajl loaded object:\n#{Yajl::Parser.parse(@json)}\n"
85
+ puts "JSON loaded object:\n#{JSON::Ext::Parser.new(@json).parse}\n"
88
86
  end
89
87
 
90
88
  puts '-' * 80
91
- puts "Wab Parse Performance"
89
+ puts 'Wab Parse Performance'
92
90
  perf = Perf.new()
93
- unless $failed.has_key?('JSON::Ext')
94
- perf.add('JSON::Ext', 'parse') { JSON.parse($json) }
91
+ unless @failed.key?('JSON::Ext')
92
+ perf.add('JSON::Ext', 'parse') { JSON.parse(@json) }
95
93
  perf.before('JSON::Ext') { JSON.parser = JSON::Ext::Parser }
96
94
  end
97
- unless $failed.has_key?('JSON::Pure')
98
- perf.add('JSON::Pure', 'parse') { JSON.parse($json) }
95
+ unless @failed.key?('JSON::Pure')
96
+ perf.add('JSON::Pure', 'parse') { JSON.parse(@json) }
99
97
  perf.before('JSON::Pure') { JSON.parser = JSON::Pure::Parser }
100
98
  end
101
- unless $failed.has_key?('Oj:wab')
102
- perf.add('Oj:wab', 'wab_load') { Oj.wab_load($json) }
99
+ unless @failed.key?('Oj:wab')
100
+ perf.add('Oj:wab', 'wab_load') { Oj.wab_load(@json) }
103
101
  end
104
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
105
- perf.run($iter)
102
+ perf.add('Yajl', 'parse') { Yajl::Parser.parse(@json) } unless @failed.key?('Yajl')
103
+ perf.run(@iter)
106
104
 
107
105
  puts '-' * 80
108
- puts "Wab Dump Performance"
106
+ puts 'Wab Dump Performance'
109
107
  perf = Perf.new()
110
- unless $failed.has_key?('JSON::Ext')
111
- perf.add('JSON::Ext', 'dump') { JSON.generate($obj) }
108
+ unless @failed.key?('JSON::Ext')
109
+ perf.add('JSON::Ext', 'dump') { JSON.generate(@obj) }
112
110
  perf.before('JSON::Ext') { JSON.generator = JSON::Ext::Generator }
113
111
  end
114
- unless $failed.has_key?('JSON::Pure')
115
- perf.add('JSON::Pure', 'generate') { JSON.generate($obj) }
112
+ unless @failed.key?('JSON::Pure')
113
+ perf.add('JSON::Pure', 'generate') { JSON.generate(@obj) }
116
114
  perf.before('JSON::Pure') { JSON.generator = JSON::Pure::Generator }
117
115
  end
118
- unless $failed.has_key?('Oj:wab')
119
- perf.add('Oj:wab', 'dump') { Oj.dump($obj, :mode => :wab) }
116
+ unless @failed.key?('Oj:wab')
117
+ perf.add('Oj:wab', 'dump') { Oj.dump(@obj, :mode => :wab) }
120
118
  end
121
- perf.add('Yajl', 'encode') { Yajl::Encoder.encode($obj) } unless $failed.has_key?('Yajl')
122
- perf.run($iter)
119
+ perf.add('Yajl', 'encode') { Yajl::Encoder.encode(@obj) } unless @failed.key?('Yajl')
120
+ perf.run(@iter)
123
121
 
124
122
  puts
125
123
  puts '-' * 80
126
124
  puts
127
125
 
128
- unless $failed.empty?
129
- puts "The following packages were not included for the reason listed"
130
- $failed.each { |tag,msg| puts "***** #{tag}: #{msg}" }
126
+ unless @failed.empty?
127
+ puts 'The following packages were not included for the reason listed'
128
+ @failed.each { |tag, msg| puts "***** #{tag}: #{msg}" }
131
129
  end
data/test/prec.rb CHANGED
@@ -2,21 +2,21 @@
2
2
 
3
3
  require 'oj'
4
4
 
5
- extras = {"locationLng" => -97.14690769100295}
5
+ extras = { 'locationLng' => -97.14690769100295 }
6
6
 
7
- Oj.default_options = {float_precision: 17}
7
+ Oj.default_options = { float_precision: 17 }
8
8
 
9
9
  encoded = Oj.dump(extras)
10
10
  puts encoded
11
11
  puts Oj.load(encoded)
12
12
 
13
- require "active_record"
13
+ require 'active_record'
14
14
 
15
15
  Oj::Rails.set_encoder()
16
16
  Oj::Rails.set_decoder()
17
17
 
18
- Oj.default_options = {float_precision: 17}
19
- # Using Oj rails encoder, gets the correct value: {"locationLng":-97.14690769100295}
18
+ Oj.default_options = { float_precision: 17 }
19
+ # Using Oj rails encoder, gets the correct value: { 'locationLng':-97.14690769100295 }
20
20
  encoded = ActiveSupport::JSON.encode(extras)
21
21
  puts encoded
22
22
  puts ActiveSupport::JSON.decode(encoded)
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Change
4
3
  attr_accessor :time
data/test/sample/dir.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'etc'
3
2
 
4
3
  module Sample
data/test/sample/doc.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'sample/hasprops'
3
2
  require 'sample/group'
4
3
  require 'sample/layer'
data/test/sample/file.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  require 'etc'
3
2
 
4
3
  module Sample
data/test/sample/group.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Group
4
3
  attr_reader :members
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  module HasProps
4
3
 
data/test/sample/layer.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Layer < Group
4
3
  attr_accessor :name
data/test/sample/rect.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Rect < Shape
4
3
 
data/test/sample/shape.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Shape
4
3
  include HasProps
data/test/sample/text.rb CHANGED
@@ -1,4 +1,3 @@
1
-
2
1
  module Sample
3
2
  class Text < Shape
4
3
  attr_accessor :text
data/test/sample.rb CHANGED
@@ -1,19 +1,19 @@
1
1
  #!/usr/bin/env ruby -wW2
2
+ # frozen_string_literal: true
2
3
 
3
- if $0 == __FILE__
4
- $: << '.'
5
- $: << '..'
6
- $: << '../lib'
7
- $: << '../ext'
4
+ if $PROGRAM_NAME == __FILE__
5
+ $LOAD_PATH << '.'
6
+ $LOAD_PATH << '..'
7
+ $LOAD_PATH << '../lib'
8
+ $LOAD_PATH << '../ext'
8
9
  end
9
10
 
10
- require 'pp'
11
11
  require 'sample/doc'
12
12
 
13
13
  def sample_doc(size=3)
14
14
  colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
15
15
 
16
- d = ::Sample::Doc.new('Sample')
16
+ d = Sample::Doc.new('Sample')
17
17
 
18
18
  # add some history
19
19
  (0..size * 10).each do |i|
@@ -22,22 +22,22 @@ def sample_doc(size=3)
22
22
 
23
23
  # add some layers
24
24
  (1..size).each do |i|
25
- layer = ::Sample::Layer.new("Layer-#{i}")
25
+ layer = Sample::Layer.new("Layer-#{i}")
26
26
  (1..size).each do |j|
27
- g = ::Sample::Group.new
27
+ g = Sample::Group.new
28
28
  (1..size).each do |k|
29
- g2 = ::Sample::Group.new
30
- r = ::Sample::Rect.new(j * 40 + 10.0, i * 10.0,
31
- 10.123456 / k, 10.0 / k, colors[(i + j + k) % colors.size])
29
+ g2 = Sample::Group.new
30
+ r = Sample::Rect.new((j * 40) + 10.0, i * 10.0,
31
+ 10.123456 / k, 10.0 / k, colors[(i + j + k) % colors.size])
32
32
  r.add_prop(:part_of, layer.name)
33
33
  g2 << r
34
- g2 << ::Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
34
+ g2 << Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
35
35
  g << g2
36
36
  end
37
- g2 = ::Sample::Group.new
37
+ g2 = Sample::Group.new
38
38
  (1..size).each do |k|
39
- o = ::Sample::Oval.new(j * 40 + 12.0, i * 10.0 + 2.0,
40
- 6.0 / k, 6.0 / k, colors[(i + j + k) % colors.size])
39
+ o = Sample::Oval.new((j * 40) + 12.0, (i * 10.0) + 2.0,
40
+ 6.0 / k, 6.0 / k, colors[(i + j + k) % colors.size])
41
41
  o.add_prop(:inside, true)
42
42
  g << o
43
43
  end
data/test/sample_json.rb CHANGED
@@ -1,13 +1,13 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- if $0 == __FILE__
4
- $: << '.'
5
- $: << '..'
6
- $: << '../lib'
7
- $: << '../ext'
4
+ if $PROGRAM_NAME == __FILE__
5
+ $LOAD_PATH << '.'
6
+ $LOAD_PATH << '..'
7
+ $LOAD_PATH << '../lib'
8
+ $LOAD_PATH << '../ext'
8
9
  end
9
10
 
10
- require 'pp'
11
11
  require 'oj'
12
12
 
13
13
  def sample_json(size=3)
@@ -32,6 +32,6 @@ def sample_json(size=3)
32
32
  container
33
33
  end
34
34
 
35
- if $0 == __FILE__
36
- File.open('sample.json', "w") { |f| f.write(Oj.dump(sample_json(3), :indent => 2)) }
35
+ if $PROGRAM_NAME == __FILE__
36
+ File.write('sample.json', Oj.dump(sample_json(3), :indent => 2))
37
37
  end