oj 2.18.5 → 3.16.11

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 (166) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1452 -0
  3. data/README.md +53 -221
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +54 -72
  6. data/ext/oj/cache.c +329 -0
  7. data/ext/oj/cache.h +22 -0
  8. data/ext/oj/cache8.c +61 -63
  9. data/ext/oj/cache8.h +12 -39
  10. data/ext/oj/circarray.c +38 -67
  11. data/ext/oj/circarray.h +16 -42
  12. data/ext/oj/code.c +214 -0
  13. data/ext/oj/code.h +40 -0
  14. data/ext/oj/compat.c +194 -110
  15. data/ext/oj/custom.c +1074 -0
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +1276 -2494
  18. data/ext/oj/dump.h +110 -0
  19. data/ext/oj/dump_compat.c +897 -0
  20. data/ext/oj/dump_leaf.c +162 -0
  21. data/ext/oj/dump_object.c +710 -0
  22. data/ext/oj/dump_strict.c +399 -0
  23. data/ext/oj/encode.h +7 -42
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +28 -53
  26. data/ext/oj/err.h +49 -46
  27. data/ext/oj/extconf.rb +33 -32
  28. data/ext/oj/fast.c +1082 -1098
  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 +919 -0
  34. data/ext/oj/object.c +545 -625
  35. data/ext/oj/odd.c +158 -168
  36. data/ext/oj/odd.h +32 -58
  37. data/ext/oj/oj.c +1727 -2080
  38. data/ext/oj/oj.h +334 -259
  39. data/ext/oj/parse.c +974 -753
  40. data/ext/oj/parse.h +97 -90
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +103 -0
  43. data/ext/oj/rails.c +1478 -0
  44. data/ext/oj/rails.h +18 -0
  45. data/ext/oj/reader.c +136 -163
  46. data/ext/oj/reader.h +76 -112
  47. data/ext/oj/resolve.c +45 -94
  48. data/ext/oj/resolve.h +7 -34
  49. data/ext/oj/rxclass.c +144 -0
  50. data/ext/oj/rxclass.h +26 -0
  51. data/ext/oj/saj.c +445 -511
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +82 -143
  55. data/ext/oj/simd.h +10 -0
  56. data/ext/oj/sparse.c +749 -644
  57. data/ext/oj/stream_writer.c +329 -0
  58. data/ext/oj/strict.c +114 -112
  59. data/ext/oj/string_writer.c +517 -0
  60. data/ext/oj/trace.c +72 -0
  61. data/ext/oj/trace.h +55 -0
  62. data/ext/oj/usual.c +1218 -0
  63. data/ext/oj/usual.h +69 -0
  64. data/ext/oj/util.c +136 -0
  65. data/ext/oj/util.h +20 -0
  66. data/ext/oj/val_stack.c +75 -72
  67. data/ext/oj/val_stack.h +94 -127
  68. data/ext/oj/validate.c +46 -0
  69. data/ext/oj/wab.c +586 -0
  70. data/lib/oj/active_support_helper.rb +1 -3
  71. data/lib/oj/bag.rb +8 -1
  72. data/lib/oj/easy_hash.rb +21 -13
  73. data/lib/oj/error.rb +10 -12
  74. data/lib/oj/json.rb +188 -0
  75. data/lib/oj/mimic.rb +165 -26
  76. data/lib/oj/saj.rb +20 -6
  77. data/lib/oj/schandler.rb +5 -4
  78. data/lib/oj/state.rb +135 -0
  79. data/lib/oj/version.rb +2 -3
  80. data/lib/oj.rb +3 -31
  81. data/pages/Advanced.md +22 -0
  82. data/pages/Compatibility.md +25 -0
  83. data/pages/Custom.md +23 -0
  84. data/pages/Encoding.md +65 -0
  85. data/pages/InstallOptions.md +20 -0
  86. data/pages/JsonGem.md +94 -0
  87. data/pages/Modes.md +161 -0
  88. data/pages/Options.md +337 -0
  89. data/pages/Parser.md +309 -0
  90. data/pages/Rails.md +167 -0
  91. data/pages/Security.md +20 -0
  92. data/pages/WAB.md +13 -0
  93. metadata +126 -163
  94. data/ext/oj/hash.c +0 -163
  95. data/ext/oj/hash.h +0 -46
  96. data/ext/oj/hash_test.c +0 -512
  97. data/test/_test_active.rb +0 -76
  98. data/test/_test_active_mimic.rb +0 -96
  99. data/test/_test_mimic_rails.rb +0 -126
  100. data/test/activesupport_datetime_test.rb +0 -23
  101. data/test/bug.rb +0 -51
  102. data/test/bug2.rb +0 -10
  103. data/test/bug3.rb +0 -46
  104. data/test/bug_fast.rb +0 -32
  105. data/test/bug_load.rb +0 -24
  106. data/test/crash.rb +0 -111
  107. data/test/curl/curl_oj.rb +0 -46
  108. data/test/curl/get_oj.rb +0 -24
  109. data/test/curl/just_curl.rb +0 -31
  110. data/test/curl/just_oj.rb +0 -51
  111. data/test/example.rb +0 -11
  112. data/test/files.rb +0 -29
  113. data/test/foo.rb +0 -24
  114. data/test/helper.rb +0 -27
  115. data/test/io.rb +0 -48
  116. data/test/isolated/shared.rb +0 -310
  117. data/test/isolated/test_mimic_after.rb +0 -13
  118. data/test/isolated/test_mimic_alone.rb +0 -12
  119. data/test/isolated/test_mimic_as_json.rb +0 -45
  120. data/test/isolated/test_mimic_before.rb +0 -13
  121. data/test/isolated/test_mimic_define.rb +0 -28
  122. data/test/isolated/test_mimic_rails_after.rb +0 -22
  123. data/test/isolated/test_mimic_rails_before.rb +0 -21
  124. data/test/isolated/test_mimic_rails_datetime.rb +0 -27
  125. data/test/isolated/test_mimic_redefine.rb +0 -15
  126. data/test/mod.rb +0 -16
  127. data/test/perf.rb +0 -107
  128. data/test/perf_compat.rb +0 -128
  129. data/test/perf_fast.rb +0 -164
  130. data/test/perf_file.rb +0 -64
  131. data/test/perf_object.rb +0 -138
  132. data/test/perf_saj.rb +0 -109
  133. data/test/perf_scp.rb +0 -151
  134. data/test/perf_simple.rb +0 -287
  135. data/test/perf_strict.rb +0 -128
  136. data/test/rails.rb +0 -50
  137. data/test/russian.rb +0 -18
  138. data/test/sample/change.rb +0 -14
  139. data/test/sample/dir.rb +0 -19
  140. data/test/sample/doc.rb +0 -36
  141. data/test/sample/file.rb +0 -48
  142. data/test/sample/group.rb +0 -16
  143. data/test/sample/hasprops.rb +0 -16
  144. data/test/sample/layer.rb +0 -12
  145. data/test/sample/line.rb +0 -20
  146. data/test/sample/oval.rb +0 -10
  147. data/test/sample/rect.rb +0 -10
  148. data/test/sample/shape.rb +0 -35
  149. data/test/sample/text.rb +0 -20
  150. data/test/sample.rb +0 -55
  151. data/test/sample_json.rb +0 -37
  152. data/test/struct.rb +0 -29
  153. data/test/test_compat.rb +0 -398
  154. data/test/test_debian.rb +0 -53
  155. data/test/test_fast.rb +0 -458
  156. data/test/test_file.rb +0 -245
  157. data/test/test_gc.rb +0 -49
  158. data/test/test_hash.rb +0 -29
  159. data/test/test_object.rb +0 -745
  160. data/test/test_saj.rb +0 -186
  161. data/test/test_scp.rb +0 -396
  162. data/test/test_serializer.rb +0 -59
  163. data/test/test_strict.rb +0 -254
  164. data/test/test_various.rb +0 -1383
  165. data/test/test_writer.rb +0 -308
  166. data/test/write_timebars.rb +0 -31
data/test/sample/doc.rb DELETED
@@ -1,36 +0,0 @@
1
-
2
- require 'sample/hasprops'
3
- require 'sample/group'
4
- require 'sample/layer'
5
- require 'sample/line'
6
- require 'sample/shape'
7
- require 'sample/oval'
8
- require 'sample/rect'
9
- require 'sample/text'
10
- require 'sample/change'
11
-
12
- module Sample
13
- class Doc
14
- include HasProps
15
-
16
- attr_accessor :title
17
- attr_accessor :create_time
18
- attr_accessor :user
19
- # Hash of layers in the document indexed by layer name.
20
- attr_reader :layers
21
- attr_reader :change_history
22
-
23
- def initialize(title)
24
- @title = title
25
- @user = ENV['USER']
26
- @create_time = Time.now
27
- @layers = { }
28
- @change_history = []
29
- end
30
-
31
- def add_change(comment, time=nil, user=nil)
32
- @change_history << Change.new(comment, time, user)
33
- end
34
-
35
- end # Doc
36
- end # Sample
data/test/sample/file.rb DELETED
@@ -1,48 +0,0 @@
1
-
2
- require 'etc'
3
-
4
- module Sample
5
-
6
- class File
7
- attr_accessor :name, :ctime, :mtime, :size, :owner, :group, :permissions
8
-
9
- def initialize(filename)
10
- @name = ::File.basename(filename)
11
- stat = ::File.stat(filename)
12
- @ctime = stat.ctime
13
- @mtime = stat.mtime
14
- @size = stat.size
15
- @owner = Etc.getpwuid(stat.uid).name
16
- @group = Etc.getgrgid(stat.gid).name
17
- if false
18
- @permissions = {
19
- 'user' => {
20
- 'read' => (0 != (stat.mode & 0x0100)),
21
- 'write' => (0 != (stat.mode & 0x0080)),
22
- 'execute' => (0 != (stat.mode & 0x0040))},
23
- 'group' => {
24
- 'read' => (0 != (stat.mode & 0x0020)),
25
- 'write' => (0 != (stat.mode & 0x0010)),
26
- 'execute' => (0 != (stat.mode & 0x0008))},
27
- 'other' => {
28
- 'read' => (0 != (stat.mode & 0x0004)),
29
- 'write' => (0 != (stat.mode & 0x0002)),
30
- 'execute' => (0 != (stat.mode & 0x0001))}
31
- }
32
- else
33
- @permissions = {
34
- 'user' => [(0 != (stat.mode & 0x0100)) ? 'r' : '-',
35
- (0 != (stat.mode & 0x0080)) ? 'w' : '-',
36
- (0 != (stat.mode & 0x0040)) ? 'x' : '-'].join(''),
37
- 'group' => [(0 != (stat.mode & 0x0020)) ? 'r' : '-',
38
- (0 != (stat.mode & 0x0010)) ? 'w' : '-',
39
- (0 != (stat.mode & 0x0008)) ? 'x' : '-'].join(''),
40
- 'other' => [(0 != (stat.mode & 0x0004)) ? 'r' : '-',
41
- (0 != (stat.mode & 0x0002)) ? 'w' : '-',
42
- (0 != (stat.mode & 0x0001)) ? 'x' : '-'].join('')
43
- }
44
- end
45
- end
46
-
47
- end # File
48
- end # Sample
data/test/sample/group.rb DELETED
@@ -1,16 +0,0 @@
1
-
2
- module Sample
3
- class Group
4
- attr_reader :members
5
-
6
- def initialize()
7
- @members = []
8
- end
9
-
10
- def <<(member)
11
- @members << member
12
- end
13
-
14
- end # Group
15
- end # Sample
16
-
@@ -1,16 +0,0 @@
1
-
2
- module Sample
3
- module HasProps
4
-
5
- def add_prop(key, value)
6
- @props = { } unless self.instance_variable_defined?(:@props)
7
- @props[key] = value
8
- end
9
-
10
- def props
11
- @props = { } unless self.instance_variable_defined?(:@props)
12
- @props
13
- end
14
-
15
- end # HasProps
16
- end # Sample
data/test/sample/layer.rb DELETED
@@ -1,12 +0,0 @@
1
-
2
- module Sample
3
- class Layer < Group
4
- attr_accessor :name
5
-
6
- def initialize(name)
7
- super()
8
- @name = name
9
- end
10
-
11
- end # Layer
12
- end # Sample
data/test/sample/line.rb DELETED
@@ -1,20 +0,0 @@
1
- module Sample
2
-
3
- class Line
4
- include HasProps
5
-
6
- attr_accessor :x, :y, :dx, :dy
7
- attr_accessor :color
8
- attr_accessor :thick
9
-
10
- def initialize(x, y, dx, dy, thick, color)
11
- @x = x
12
- @y = y
13
- @dx = dx
14
- @dy = dy
15
- @thick = thick
16
- @color = color
17
- end
18
-
19
- end # Line
20
- end # Sample
data/test/sample/oval.rb DELETED
@@ -1,10 +0,0 @@
1
- module Sample
2
-
3
- class Oval < Shape
4
-
5
- def initialize(left, top, wide, high, color=nil)
6
- super
7
- end
8
-
9
- end # Oval
10
- end # Sample
data/test/sample/rect.rb DELETED
@@ -1,10 +0,0 @@
1
-
2
- module Sample
3
- class Rect < Shape
4
-
5
- def initialize(left, top, wide, high, color=nil)
6
- super
7
- end
8
-
9
- end # Rect
10
- end # Sample
data/test/sample/shape.rb DELETED
@@ -1,35 +0,0 @@
1
-
2
- module Sample
3
- class Shape
4
- include HasProps
5
-
6
- attr_accessor :bounds
7
- attr_accessor :color
8
- attr_accessor :border, :border_color
9
-
10
- def initialize(left, top, wide, high, color=nil)
11
- @bounds = [[left, top], [left + wide, top + high]]
12
- @color = color
13
- @border = 1
14
- @border_color = :black
15
- end
16
-
17
- def left
18
- @bounds[0][0]
19
- end
20
-
21
- def top
22
- @bounds[0][1]
23
- end
24
-
25
- def width
26
- @bounds[1][0] - @bounds[0][0]
27
- end
28
-
29
- def height
30
- @bounds[1][1] - @bounds[0][1]
31
- end
32
-
33
- end # Shape
34
- end # Sample
35
-
data/test/sample/text.rb DELETED
@@ -1,20 +0,0 @@
1
-
2
- module Sample
3
- class Text < Shape
4
- attr_accessor :text
5
- attr_accessor :font
6
- attr_accessor :font_size
7
- attr_accessor :just
8
- attr_accessor :text_color
9
-
10
- def initialize(text, left, top, wide, high, color=nil)
11
- super(left, top, wide, high, color)
12
- @text = text
13
- @font = 'helvetica'
14
- @font_size = 14
15
- @just = 'left'
16
- @text_color = 'black'
17
- end
18
-
19
- end # Text
20
- end # Sample
data/test/sample.rb DELETED
@@ -1,55 +0,0 @@
1
- #!/usr/bin/env ruby -wW2
2
-
3
- if $0 == __FILE__
4
- $: << '.'
5
- $: << '..'
6
- $: << '../lib'
7
- $: << '../ext'
8
- end
9
-
10
- require 'pp'
11
- require 'sample/doc'
12
-
13
-
14
- def sample_doc(size=3)
15
- colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
16
-
17
- d = ::Sample::Doc.new('Sample')
18
-
19
- # add some history
20
- (0..size * 10).each do |i|
21
- d.add_change("Changed at t+#{i}.")
22
- end
23
-
24
- # add some layers
25
- (1..size).each do |i|
26
- layer = ::Sample::Layer.new("Layer-#{i}")
27
- (1..size).each do |j|
28
- g = ::Sample::Group.new
29
- (1..size).each do |k|
30
- g2 = ::Sample::Group.new
31
- r = ::Sample::Rect.new(j * 40 + 10.0, i * 10.0,
32
- 10.123456 / k, 10.0 / k, colors[(i + j + k) % colors.size])
33
- r.add_prop(:part_of, layer.name)
34
- g2 << r
35
- g2 << ::Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
36
- g << g2
37
- end
38
- g2 = ::Sample::Group.new
39
- (1..size).each do |k|
40
- o = ::Sample::Oval.new(j * 40 + 12.0, i * 10.0 + 2.0,
41
- 6.0 / k, 6.0 / k, colors[(i + j + k) % colors.size])
42
- o.add_prop(:inside, true)
43
- g << o
44
- end
45
- g << g2
46
- layer << g
47
- end
48
- d.layers[layer.name] = layer
49
- end
50
-
51
- # some properties
52
- d.add_prop(:purpose, 'an example')
53
-
54
- d
55
- end
data/test/sample_json.rb DELETED
@@ -1,37 +0,0 @@
1
- #!/usr/bin/env ruby -wW2
2
-
3
- if $0 == __FILE__
4
- $: << '.'
5
- $: << '..'
6
- $: << '../lib'
7
- $: << '../ext'
8
- end
9
-
10
- require 'pp'
11
- require 'oj'
12
-
13
- def sample_json(size=3)
14
- colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
15
- container = []
16
- size.times do |i|
17
- box = {
18
- 'color' => colors[i % colors.size],
19
- 'fragile' => (0 == (i % 2)),
20
- 'width' => i,
21
- 'height' => i,
22
- 'depth' => i,
23
- 'weight' => i * 1.3,
24
- 'address' => {
25
- 'street' => "#{i} Main Street",
26
- 'city' => 'Sity',
27
- 'state' => nil
28
- }
29
- }
30
- container << box
31
- end
32
- container
33
- end
34
-
35
- if $0 == __FILE__
36
- File.open('sample.json', "w") { |f| f.write(Oj.dump(sample_json(3), :indent => 2)) }
37
- end
data/test/struct.rb DELETED
@@ -1,29 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- # Ubuntu does not accept arguments to ruby when called using env. To get warnings to show up the -w options is
5
- # required. That can be set in the RUBYOPT environment variable.
6
- # export RUBYOPT=-w
7
-
8
- $VERBOSE = true
9
-
10
- $: << File.join(File.dirname(__FILE__), "../lib")
11
- $: << File.join(File.dirname(__FILE__), "../ext")
12
-
13
- require 'oj'
14
-
15
- A = Struct.new(:a,:b,:c,:d)
16
- B = Struct.new(:e,:f)
17
-
18
- obj = [A.new(55, B.new(1, 'X'), B.new(2, 'Y'), 3)]
19
-
20
- s = Oj.dump(obj, :mode => :object)
21
-
22
- 100000.times do
23
- Oj.load(s, :mode => :object)
24
- # ds = Oj.dump(o, :mode => :object)
25
- # if ds != s
26
- # puts ds
27
- # raise "holy crap"
28
- # end
29
- end