oj 3.9.1 → 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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1452 -0
  3. data/README.md +21 -6
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +50 -68
  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 +9 -36
  10. data/ext/oj/circarray.c +38 -42
  11. data/ext/oj/circarray.h +12 -13
  12. data/ext/oj/code.c +158 -179
  13. data/ext/oj/code.h +20 -22
  14. data/ext/oj/compat.c +145 -205
  15. data/ext/oj/custom.c +740 -880
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +1145 -844
  18. data/ext/oj/dump.h +71 -57
  19. data/ext/oj/dump_compat.c +575 -655
  20. data/ext/oj/dump_leaf.c +96 -186
  21. data/ext/oj/dump_object.c +533 -660
  22. data/ext/oj/dump_strict.c +306 -340
  23. data/ext/oj/encode.h +4 -33
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +28 -28
  26. data/ext/oj/err.h +39 -42
  27. data/ext/oj/extconf.rb +28 -7
  28. data/ext/oj/fast.c +1052 -1113
  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 +471 -430
  34. data/ext/oj/object.c +532 -580
  35. data/ext/oj/odd.c +156 -142
  36. data/ext/oj/odd.h +25 -26
  37. data/ext/oj/oj.c +1346 -961
  38. data/ext/oj/oj.h +307 -290
  39. data/ext/oj/parse.c +954 -858
  40. data/ext/oj/parse.h +74 -72
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +103 -0
  43. data/ext/oj/rails.c +819 -836
  44. data/ext/oj/rails.h +8 -11
  45. data/ext/oj/reader.c +136 -147
  46. data/ext/oj/reader.h +69 -83
  47. data/ext/oj/resolve.c +41 -63
  48. data/ext/oj/resolve.h +4 -6
  49. data/ext/oj/rxclass.c +69 -72
  50. data/ext/oj/rxclass.h +12 -13
  51. data/ext/oj/saj.c +440 -485
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +79 -118
  55. data/ext/oj/simd.h +10 -0
  56. data/ext/oj/sparse.c +739 -709
  57. data/ext/oj/stream_writer.c +141 -175
  58. data/ext/oj/strict.c +103 -128
  59. data/ext/oj/string_writer.c +244 -261
  60. data/ext/oj/trace.c +34 -41
  61. data/ext/oj/trace.h +42 -15
  62. data/ext/oj/usual.c +1218 -0
  63. data/ext/oj/usual.h +69 -0
  64. data/ext/oj/util.c +107 -107
  65. data/ext/oj/util.h +4 -3
  66. data/ext/oj/val_stack.c +61 -78
  67. data/ext/oj/val_stack.h +80 -114
  68. data/ext/oj/validate.c +46 -0
  69. data/ext/oj/wab.c +316 -361
  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 +9 -9
  73. data/lib/oj/error.rb +1 -2
  74. data/lib/oj/json.rb +162 -150
  75. data/lib/oj/mimic.rb +54 -20
  76. data/lib/oj/saj.rb +20 -6
  77. data/lib/oj/schandler.rb +5 -4
  78. data/lib/oj/state.rb +12 -8
  79. data/lib/oj/version.rb +1 -2
  80. data/lib/oj.rb +2 -8
  81. data/pages/Compatibility.md +1 -1
  82. data/pages/Encoding.md +1 -1
  83. data/pages/InstallOptions.md +20 -0
  84. data/pages/JsonGem.md +15 -0
  85. data/pages/Modes.md +9 -3
  86. data/pages/Options.md +62 -12
  87. data/pages/Parser.md +309 -0
  88. data/pages/Rails.md +73 -22
  89. metadata +68 -192
  90. data/ext/oj/hash.c +0 -163
  91. data/ext/oj/hash.h +0 -46
  92. data/ext/oj/hash_test.c +0 -512
  93. data/test/_test_active.rb +0 -76
  94. data/test/_test_active_mimic.rb +0 -96
  95. data/test/_test_mimic_rails.rb +0 -126
  96. data/test/activerecord/result_test.rb +0 -27
  97. data/test/activesupport4/decoding_test.rb +0 -108
  98. data/test/activesupport4/encoding_test.rb +0 -531
  99. data/test/activesupport4/test_helper.rb +0 -41
  100. data/test/activesupport5/decoding_test.rb +0 -125
  101. data/test/activesupport5/encoding_test.rb +0 -485
  102. data/test/activesupport5/encoding_test_cases.rb +0 -90
  103. data/test/activesupport5/test_helper.rb +0 -50
  104. data/test/activesupport5/time_zone_test_helpers.rb +0 -24
  105. data/test/bar.rb +0 -25
  106. data/test/files.rb +0 -29
  107. data/test/foo.rb +0 -21
  108. data/test/helper.rb +0 -26
  109. data/test/isolated/shared.rb +0 -308
  110. data/test/isolated/test_mimic_after.rb +0 -13
  111. data/test/isolated/test_mimic_alone.rb +0 -12
  112. data/test/isolated/test_mimic_as_json.rb +0 -45
  113. data/test/isolated/test_mimic_before.rb +0 -13
  114. data/test/isolated/test_mimic_define.rb +0 -28
  115. data/test/isolated/test_mimic_rails_after.rb +0 -22
  116. data/test/isolated/test_mimic_rails_before.rb +0 -21
  117. data/test/isolated/test_mimic_redefine.rb +0 -15
  118. data/test/json_gem/json_addition_test.rb +0 -216
  119. data/test/json_gem/json_common_interface_test.rb +0 -148
  120. data/test/json_gem/json_encoding_test.rb +0 -107
  121. data/test/json_gem/json_ext_parser_test.rb +0 -20
  122. data/test/json_gem/json_fixtures_test.rb +0 -35
  123. data/test/json_gem/json_generator_test.rb +0 -383
  124. data/test/json_gem/json_generic_object_test.rb +0 -90
  125. data/test/json_gem/json_parser_test.rb +0 -470
  126. data/test/json_gem/json_string_matching_test.rb +0 -42
  127. data/test/json_gem/test_helper.rb +0 -18
  128. data/test/perf.rb +0 -107
  129. data/test/perf_compat.rb +0 -130
  130. data/test/perf_fast.rb +0 -164
  131. data/test/perf_file.rb +0 -64
  132. data/test/perf_object.rb +0 -138
  133. data/test/perf_saj.rb +0 -109
  134. data/test/perf_scp.rb +0 -151
  135. data/test/perf_simple.rb +0 -287
  136. data/test/perf_strict.rb +0 -145
  137. data/test/perf_wab.rb +0 -131
  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 -54
  151. data/test/sample_json.rb +0 -37
  152. data/test/test_compat.rb +0 -509
  153. data/test/test_custom.rb +0 -503
  154. data/test/test_debian.rb +0 -53
  155. data/test/test_fast.rb +0 -470
  156. data/test/test_file.rb +0 -239
  157. data/test/test_gc.rb +0 -49
  158. data/test/test_hash.rb +0 -29
  159. data/test/test_integer_range.rb +0 -73
  160. data/test/test_null.rb +0 -376
  161. data/test/test_object.rb +0 -1018
  162. data/test/test_saj.rb +0 -186
  163. data/test/test_scp.rb +0 -433
  164. data/test/test_strict.rb +0 -410
  165. data/test/test_various.rb +0 -741
  166. data/test/test_wab.rb +0 -307
  167. data/test/test_writer.rb +0 -380
  168. data/test/tests.rb +0 -24
  169. data/test/tests_mimic.rb +0 -14
  170. data/test/tests_mimic_addition.rb +0 -7
  171. data/test/zoo.rb +0 -13
data/test/perf_wab.rb DELETED
@@ -1,131 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- $: << '.'
5
- $: << File.join(File.dirname(__FILE__), "../lib")
6
- $: << File.join(File.dirname(__FILE__), "../ext")
7
-
8
- require 'optparse'
9
- require 'perf'
10
- require 'oj'
11
-
12
- $verbose = false
13
- $indent = 0
14
- $iter = 20000
15
- $with_bignum = false
16
- $with_nums = true
17
- $size = 0
18
-
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)
27
-
28
- $obj = {
29
- a: 'Alpha', # string
30
- b: true, # boolean
31
- c: 12345, # number
32
- d: [ true, [false, [-123456789, nil], 3.9676, ['Something else.', false], nil]], # mix it up array
33
- e: { zero: nil, one: 1, two: 2, three: [3], four: [0, 1, 2, 3, 4] }, # hash
34
- f: nil, # nil
35
- h: { a: { b: { c: { d: {e: { f: { g: nil }}}}}}}, # deep hash, not that deep
36
- i: [[[[[[[nil]]]]]]] # deep array, again, not that deep
37
- }
38
- $obj[:g] = 12345678901234567890123456789 if $with_bignum
39
-
40
- Oj.default_options = { :indent => $indent, :mode => :wab }
41
-
42
- if 0 < $size
43
- o = $obj
44
- $obj = []
45
- (4 * $size).times do
46
- $obj << o
47
- end
48
- end
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
55
-
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
63
- end
64
-
65
- # 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|
69
- require 'json'
70
- require 'json/ext'
71
- JSON.generator = JSON::Ext::Generator
72
- JSON.parser = JSON::Ext::Parser
73
- JSON.parse(JSON.generate(o))
74
- }
75
- capture_error('JSON::Pure', $obj, 'generate', 'parse') { |o|
76
- require 'json/pure'
77
- JSON.generator = JSON::Pure::Generator
78
- JSON.parser = JSON::Pure::Parser
79
- JSON.parse(JSON.generate(o))
80
- }
81
-
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"
88
- end
89
-
90
- puts '-' * 80
91
- puts "Wab Parse Performance"
92
- perf = Perf.new()
93
- unless $failed.has_key?('JSON::Ext')
94
- perf.add('JSON::Ext', 'parse') { JSON.parse($json) }
95
- perf.before('JSON::Ext') { JSON.parser = JSON::Ext::Parser }
96
- end
97
- unless $failed.has_key?('JSON::Pure')
98
- perf.add('JSON::Pure', 'parse') { JSON.parse($json) }
99
- perf.before('JSON::Pure') { JSON.parser = JSON::Pure::Parser }
100
- end
101
- unless $failed.has_key?('Oj:wab')
102
- perf.add('Oj:wab', 'wab_load') { Oj.wab_load($json) }
103
- end
104
- perf.add('Yajl', 'parse') { Yajl::Parser.parse($json) } unless $failed.has_key?('Yajl')
105
- perf.run($iter)
106
-
107
- puts '-' * 80
108
- puts "Wab Dump Performance"
109
- perf = Perf.new()
110
- unless $failed.has_key?('JSON::Ext')
111
- perf.add('JSON::Ext', 'dump') { JSON.generate($obj) }
112
- perf.before('JSON::Ext') { JSON.generator = JSON::Ext::Generator }
113
- end
114
- unless $failed.has_key?('JSON::Pure')
115
- perf.add('JSON::Pure', 'generate') { JSON.generate($obj) }
116
- perf.before('JSON::Pure') { JSON.generator = JSON::Pure::Generator }
117
- end
118
- unless $failed.has_key?('Oj:wab')
119
- perf.add('Oj:wab', 'dump') { Oj.dump($obj, :mode => :wab) }
120
- end
121
- perf.add('Yajl', 'encode') { Yajl::Encoder.encode($obj) } unless $failed.has_key?('Yajl')
122
- perf.run($iter)
123
-
124
- puts
125
- puts '-' * 80
126
- puts
127
-
128
- unless $failed.empty?
129
- puts "The following packages were not included for the reason listed"
130
- $failed.each { |tag,msg| puts "***** #{tag}: #{msg}" }
131
- end
@@ -1,14 +0,0 @@
1
-
2
- module Sample
3
- class Change
4
- attr_accessor :time
5
- attr_accessor :user
6
- attr_accessor :comment
7
-
8
- def initialize(comment=nil, time=nil, user=nil)
9
- @user = user || ENV['USER']
10
- @time = time || Time.now
11
- @comment = comment
12
- end
13
- end # Change
14
- end # Sample
data/test/sample/dir.rb DELETED
@@ -1,19 +0,0 @@
1
-
2
- require 'etc'
3
-
4
- module Sample
5
-
6
- class Dir < File
7
- attr_accessor :files
8
-
9
- def initialize(filename)
10
- super
11
- @files = []
12
- end
13
-
14
- def <<(f)
15
- @files << f
16
- end
17
-
18
- end # Dir
19
- end # Sample
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,54 +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
- def sample_doc(size=3)
14
- colors = [ :black, :gray, :white, :red, :blue, :yellow, :green, :purple, :orange ]
15
-
16
- d = ::Sample::Doc.new('Sample')
17
-
18
- # add some history
19
- (0..size * 10).each do |i|
20
- d.add_change("Changed at t+#{i}.")
21
- end
22
-
23
- # add some layers
24
- (1..size).each do |i|
25
- layer = ::Sample::Layer.new("Layer-#{i}")
26
- (1..size).each do |j|
27
- g = ::Sample::Group.new
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])
32
- r.add_prop(:part_of, layer.name)
33
- g2 << r
34
- g2 << ::Sample::Text.new("#{k} in #{j}", r.left, r.top, r.width, r.height)
35
- g << g2
36
- end
37
- g2 = ::Sample::Group.new
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])
41
- o.add_prop(:inside, true)
42
- g << o
43
- end
44
- g << g2
45
- layer << g
46
- end
47
- d.layers[layer.name] = layer
48
- end
49
-
50
- # some properties
51
- d.add_prop(:purpose, 'an example')
52
-
53
- d
54
- 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