oj 1.2.8 → 1.2.9

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of oj might be problematic. Click here for more details.

data/README.md CHANGED
@@ -24,11 +24,9 @@ A fast JSON parser and Object marshaller as a Ruby gem.
24
24
 
25
25
  ## <a name="release">Release Notes</a>
26
26
 
27
- ### Release 1.2.8
27
+ ### Release 1.2.9
28
28
 
29
- - Included a contribution by nevans to fix a math.h issue with an old fedora linux machine.
30
-
31
- - Included a fix to the documentation found by mat.
29
+ - Changed the error message for invalid keys in compat mode to identify offending type.
32
30
 
33
31
  ## <a name="description">Description</a>
34
32
 
@@ -57,7 +55,10 @@ to_hash() is more flexible and produces more consistent output so it has a
57
55
  preference over the to_json() method. If neither the to_json() or to_hash()
58
56
  methods exist then the Oj internal Object variable encoding is used.
59
57
 
60
- Oj is compatible with Ruby 1.8.7, 1.9.2, 1.9.3, JRuby, and RBX.
58
+ Oj is compatible with Ruby 1.8.7, 1.9.2, 1.9.3, JRuby, RBX, and the latest 2.0dev.
59
+
60
+ Oj is also compatible with Rails. Just make sure the Oj gem is installed and
61
+ [multi_json](https://github.com/intridea/multi_json) will pick it up and use it.
61
62
 
62
63
  ## <a name="compare">Comparisons</a>
63
64
 
@@ -652,7 +652,7 @@ hash_cb_strict(VALUE key, VALUE value, Out out) {
652
652
  long size;
653
653
 
654
654
  if (rb_type(key) != T_STRING) {
655
- rb_raise(rb_eTypeError, "In :strict mode all Hash keys must be Strings.");
655
+ rb_raise(rb_eTypeError, "In :strict mode all Hash keys must be Strings, not %s.\n", rb_class2name(rb_obj_class(key)));
656
656
  }
657
657
  if (0 == out->opts->dump_opts) {
658
658
  size = depth * out->indent + 1;
@@ -736,7 +736,7 @@ hash_cb_compat(VALUE key, VALUE value, Out out) {
736
736
  dump_sym_comp(key, out);
737
737
  break;
738
738
  default:
739
- rb_raise(rb_eTypeError, "In :strict mode all Hash keys must be Strings.");
739
+ rb_raise(rb_eTypeError, "In :compat mode all Hash keys must be Strings or Symbols, not %s.\n", rb_class2name(rb_obj_class(key)));
740
740
  break;
741
741
  }
742
742
  if (0 == out->opts->dump_opts) {
@@ -1361,7 +1361,7 @@ dump_leaf_str(Leaf leaf, Out out) {
1361
1361
  break;
1362
1362
  case COL_VAL:
1363
1363
  default:
1364
- rb_raise(rb_eTypeError, "Unexpected value type %02x.", leaf->value_type);
1364
+ rb_raise(rb_eTypeError, "Unexpected value type %02x.\n", leaf->value_type);
1365
1365
  break;
1366
1366
  }
1367
1367
  }
@@ -1381,7 +1381,7 @@ dump_leaf_fixnum(Leaf leaf, Out out) {
1381
1381
  break;
1382
1382
  case COL_VAL:
1383
1383
  default:
1384
- rb_raise(rb_eTypeError, "Unexpected value type %02x.", leaf->value_type);
1384
+ rb_raise(rb_eTypeError, "Unexpected value type %02x.\n", leaf->value_type);
1385
1385
  break;
1386
1386
  }
1387
1387
  }
@@ -1397,7 +1397,7 @@ dump_leaf_float(Leaf leaf, Out out) {
1397
1397
  break;
1398
1398
  case COL_VAL:
1399
1399
  default:
1400
- rb_raise(rb_eTypeError, "Unexpected value type %02x.", leaf->value_type);
1400
+ rb_raise(rb_eTypeError, "Unexpected value type %02x.\n", leaf->value_type);
1401
1401
  break;
1402
1402
  }
1403
1403
  }
@@ -1508,7 +1508,7 @@ dump_leaf(Leaf leaf, int depth, Out out) {
1508
1508
  dump_leaf_hash(leaf, depth, out);
1509
1509
  break;
1510
1510
  default:
1511
- rb_raise(rb_eTypeError, "Unexpected type %02x.", leaf->type);
1511
+ rb_raise(rb_eTypeError, "Unexpected type %02x.\n", leaf->type);
1512
1512
  break;
1513
1513
  }
1514
1514
  }
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '1.2.8'
4
+ VERSION = '1.2.9'
5
5
  end
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env ruby -wW1
2
+ # encoding: UTF-8
3
+
4
+ $: << File.join(File.dirname(__FILE__), "../lib")
5
+ $: << File.join(File.dirname(__FILE__), "../ext")
6
+
7
+ #require 'test/unit'
8
+ require 'optparse'
9
+ require 'oj'
10
+ require 'ox'
11
+
12
+ $indent = 2
13
+
14
+ opts = OptionParser.new
15
+ opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
16
+ files = opts.parse(ARGV)
17
+
18
+ iter = 100000
19
+ s = %{
20
+ { "class": "Foo::Bar",
21
+ "attr1": [ true, [false, [12345, null], 3.967, ["something", false], null]],
22
+ "attr2": { "one": 1 }
23
+ }
24
+ }
25
+ #s = File.read('sample.json')
26
+
27
+ Oj.default_options = { :indent => 0 }
28
+
29
+ obj = Oj.load(s)
30
+ xml = Ox.dump(obj, :indent => 0)
31
+
32
+ puts xml
33
+
34
+ start = Time.now
35
+ iter.times do
36
+ Oj.load(s)
37
+ end
38
+ dt = Time.now - start
39
+ puts "%d Oj.load()s in %0.3f seconds or %0.1f loads/msec" % [iter, dt, iter/dt/1000.0]
40
+
41
+ start = Time.now
42
+ iter.times do
43
+ Ox.load(xml)
44
+ end
45
+ dt = Time.now - start
46
+ puts "%d Ox.load()s in %0.3f seconds or %0.1f loads/msec" % [iter, dt, iter/dt/1000.0]
47
+
48
+ puts
49
+
50
+ start = Time.now
51
+ iter.times do
52
+ Oj.dump(obj)
53
+ end
54
+ dt = Time.now - start
55
+ puts "%d Oj.dump()s in %0.3f seconds or %0.1f dumps/msec" % [iter, dt, iter/dt/1000.0]
56
+
57
+ start = Time.now
58
+ iter.times do
59
+ Ox.dump(obj)
60
+ end
61
+ dt = Time.now - start
62
+ puts "%d Ox.dump()s in %0.3f seconds or %0.1f dumps/msec" % [iter, dt, iter/dt/1000.0]
63
+
64
+ puts
@@ -15,6 +15,19 @@ opts = OptionParser.new
15
15
  opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
16
16
  files = opts.parse(ARGV)
17
17
 
18
+ class Foo
19
+ def initialize()
20
+ @x = true
21
+ @y = 58
22
+ end
23
+ def to_json()
24
+ %{{"x":#{@x},"y":#{@y}}}
25
+ end
26
+ def to_hash()
27
+ { 'x' => @x, 'y' => @y }
28
+ end
29
+ end
30
+
18
31
  iter = 100000
19
32
  s = %{
20
33
  { "class": "Foo::Bar",
@@ -23,36 +36,41 @@ s = %{
23
36
  }
24
37
  }
25
38
 
39
+ obj = Oj.load(s)
40
+ obj["foo"] = Foo.new()
41
+
42
+ Oj.default_options = { :indent => 0, :effort => :internal }
43
+
44
+ puts
45
+
26
46
  start = Time.now
27
47
  iter.times do
28
48
  Oj.load(s)
29
49
  end
30
- oj_dt = Time.now - start
31
- puts "%d Oj.load()s in %0.3f seconds or %0.1f loads/msec" % [iter, oj_dt, iter/oj_dt/1000.0]
50
+ dt = Time.now - start
51
+ puts "%d Oj.load()s in %0.3f seconds or %0.1f loads/msec" % [iter, dt, iter/dt/1000.0]
32
52
 
33
53
  start = Time.now
34
54
  iter.times do
35
55
  Yajl::Parser.parse(s)
36
56
  end
37
- yajl_dt = Time.now - start
38
- puts "%d Yajl::Parser.parse()s in %0.3f seconds or %0.1f parses/msec" % [iter, yajl_dt, iter/yajl_dt/1000.0]
57
+ dt = Time.now - start
58
+ puts "%d Yajl::Parser.parse()s in %0.3f seconds or %0.1f parses/msec" % [iter, dt, iter/dt/1000.0]
39
59
 
40
- puts "Oj is %0.1f times faster than YAJL at parsing." % [yajl_dt / oj_dt]
60
+ puts
41
61
 
42
-
43
- obj = Oj.load(s)
44
62
  start = Time.now
45
63
  iter.times do
46
64
  Oj.dump(obj)
47
65
  end
48
- oj_dt = Time.now - start
49
- puts "%d Oj.dump()s in %0.3f seconds or %0.1f dumps/msec" % [iter, oj_dt, iter/oj_dt/1000.0]
66
+ dt = Time.now - start
67
+ puts "%d Oj.dump()s in %0.3f seconds or %0.1f dumps/msec" % [iter, dt, iter/dt/1000.0]
50
68
 
51
69
  start = Time.now
52
70
  iter.times do
53
71
  Yajl::Encoder.encode(obj)
54
72
  end
55
- yajl_dt = Time.now - start
56
- puts "%d Yajl::Encoder.encode()s in %0.3f seconds or %0.1f encodes/msec" % [iter, yajl_dt, iter/yajl_dt/1000.0]
73
+ dt = Time.now - start
74
+ puts "%d Yajl::Encoder.encode()s in %0.3f seconds or %0.1f encodes/msec" % [iter, dt, iter/dt/1000.0]
57
75
 
58
- puts "Oj is %0.1f times faster than YAJL at dumping." % [yajl_dt / oj_dt]
76
+ puts
@@ -0,0 +1,213 @@
1
+ #!/usr/bin/env ruby -wW1
2
+
3
+ $: << '.'
4
+ $: << '..'
5
+ $: << '../lib'
6
+ $: << '../ext'
7
+
8
+ if __FILE__ == $0
9
+ if (i = ARGV.index('-I'))
10
+ x,path = ARGV.slice!(i, 2)
11
+ $: << path
12
+ end
13
+ end
14
+
15
+ require 'optparse'
16
+ require 'ox'
17
+ require 'oj'
18
+ require 'perf'
19
+ require 'sample'
20
+ require 'files'
21
+
22
+ $verbose = 0
23
+ $circular = false
24
+ $indent = 0
25
+
26
+ do_sample = false
27
+ do_files = false
28
+
29
+ do_load = false
30
+ do_dump = false
31
+ do_read = false
32
+ do_write = false
33
+ $iter = 1000
34
+
35
+ opts = OptionParser.new
36
+ opts.on("-v", "increase verbosity") { $verbose += 1 }
37
+
38
+ opts.on("-c", "circular options") { $circular = true }
39
+
40
+ opts.on("-s", "load and dump as sample Ruby object") { do_sample = true }
41
+ opts.on("-f", "load and dump as files Ruby object") { do_files = true }
42
+
43
+ opts.on("-l", "load") { do_load = true }
44
+ opts.on("-d", "dump") { do_dump = true }
45
+ opts.on("-r", "read") { do_read = true }
46
+ opts.on("-w", "write") { do_write = true }
47
+ opts.on("-a", "load, dump, read and write") { do_load = true; do_dump = true; do_read = true; do_write = true }
48
+
49
+ opts.on("-i", "--iterations [Int]", Integer, "iterations") { |i| $iter = i }
50
+
51
+ opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
52
+ files = opts.parse(ARGV)
53
+
54
+ if files.empty?
55
+ data = []
56
+ obj = do_sample ? sample_doc(2) : files('..')
57
+ mars = Marshal.dump(obj)
58
+ xml = Ox.dump(obj, :indent => $indent, circular: $circular)
59
+ json = Oj.dump(obj, :indent => $indent, circular: $circular)
60
+ File.open('sample.xml', 'w') { |f| f.write(xml) }
61
+ File.open('sample.json', 'w') { |f| f.write(json) }
62
+ File.open('sample.marshal', 'w') { |f| f.write(mars) }
63
+ data << { :file => 'sample.xml', :obj => obj, :xml => xml, :marshal => mars, :json => json }
64
+ else
65
+ puts "loading and parsing #{files}\n\n"
66
+ # TBD change to allow xml and json
67
+ data = files.map do |f|
68
+ xml = File.read(f)
69
+ obj = Ox.load(xml);
70
+ mars = Marshal.dump(obj)
71
+ json = Oj.dump(obj, :indent => $indent, circular: $circular)
72
+ { :file => f, :obj => obj, :xml => xml, :marshal => mars, :json => json }
73
+ end
74
+ end
75
+
76
+ $ox_load_time = 0
77
+ $mars_load_time = 0
78
+ $ox_dump_time = 0
79
+ $oj_dump_time = 0
80
+ $mars_dump_time = 0
81
+
82
+ def perf_load(d)
83
+ filename = d[:file]
84
+ marshal_filename = 'sample.marshal'
85
+ xml = d[:xml]
86
+ mars = d[:marshal]
87
+ json = d[:json]
88
+
89
+ if 0 < $verbose
90
+ obj = Ox.load(xml, :mode => :object, :trace => $verbose)
91
+ return
92
+ end
93
+ start = Time.now
94
+ (1..$iter).each do
95
+ obj = Ox.load(xml, :mode => :object)
96
+ end
97
+ $ox_load_time = Time.now - start
98
+ puts "Parsing #{$iter} times with Ox took #{$ox_load_time} seconds."
99
+
100
+ start = Time.now
101
+ (1..$iter).each do
102
+ obj = Oj.load(json, :mode => :object)
103
+ end
104
+ $oj_load_time = Time.now - start
105
+ puts "Parsing #{$iter} times with Oj took #{$oj_load_time} seconds."
106
+
107
+ start = Time.now
108
+ (1..$iter).each do
109
+ obj = Marshal.load(mars)
110
+ end
111
+ $mars_load_time = Time.now - start
112
+ puts "Marshalling #{$iter} times took #{$mars_load_time} seconds."
113
+ puts ">>> Ox is %0.1f faster than Marshal loading.\n\n" % [$mars_load_time/$ox_load_time]
114
+ end
115
+
116
+ def perf_dump(d)
117
+ obj = d[:obj]
118
+
119
+ start = Time.now
120
+ (1..$iter).each do
121
+ xml = Ox.dump(obj, :indent => $indent, :circular => $circular)
122
+ #puts "*** ox:\n#{xml}"
123
+ end
124
+ $ox_dump_time = Time.now - start
125
+ puts "Ox dumping #{$iter} times with ox took #{$ox_dump_time} seconds."
126
+
127
+ Oj.default_options = {:indent => $indent}
128
+ start = Time.now
129
+ (1..$iter).each do
130
+ json = Oj.dump(obj)
131
+ end
132
+ $oj_dump_time = Time.now - start
133
+ puts "Oj dumping #{$iter} times with oj took #{$oj_dump_time} seconds."
134
+
135
+ obj = d[:obj]
136
+ start = Time.now
137
+ (1..$iter).each do
138
+ m = Marshal.dump(obj)
139
+ end
140
+ $mars_dump_time = Time.now - start
141
+ puts "Marshal dumping #{$iter} times took #{$mars_dump_time} seconds."
142
+ puts ">>> Ox is %0.1f faster than Marshal dumping.\n\n" % [$mars_dump_time/$ox_dump_time]
143
+ end
144
+
145
+ def perf_read(d)
146
+ ox_read_time = 0
147
+ mars_read_time = 0
148
+
149
+ filename = d[:file]
150
+ marshal_filename = 'sample.marshal'
151
+ xml = d[:xml]
152
+ mars = d[:marshal]
153
+
154
+ # now load from the file
155
+ start = Time.now
156
+ (1..$iter).each do
157
+ obj = Ox.load_file(filename, :mode => :object)
158
+ end
159
+ ox_read_time = Time.now - start
160
+ puts "Loading and parsing #{$iter} times with ox took #{ox_read_time} seconds."
161
+
162
+ start = Time.now
163
+ (1..$iter).each do
164
+ m = File.read(marshal_filename)
165
+ obj = Marshal.load(m)
166
+ end
167
+ mars_read_time = Time.now - start
168
+ puts "Reading and marshalling #{$iter} times took #{mars_read_time} seconds."
169
+ puts ">>> Ox is %0.1f faster than Marshal loading and parsing.\n\n" % [mars_read_time/ox_read_time]
170
+
171
+ end
172
+
173
+ def perf_write(d)
174
+ ox_write_time = 0
175
+ mars_write_time = 0
176
+
177
+ ox_filename = 'out.xml'
178
+ marshal_filename = 'out.marshal'
179
+ obj = d[:obj]
180
+
181
+ start = Time.now
182
+ (1..$iter).each do
183
+ xml = Ox.to_file(ox_filename, obj, :indent => $indent)
184
+ end
185
+ ox_write_time = Time.now - start
186
+ puts "Ox dumping #{$iter} times with ox took #{ox_write_time} seconds."
187
+
188
+ start = Time.now
189
+ (1..$iter).each do
190
+ m = Marshal.dump(obj, circular: $circular)
191
+ File.open(marshal_filename, "w") { |f| f.write(m) }
192
+ end
193
+ mars_write_time = Time.now - start
194
+ puts "Marshal dumping and writing #{$iter} times took #{mars_write_time} seconds."
195
+ puts ">>> Ox is %0.1f faster than Marshal dumping.\n\n" % [mars_write_time/ox_write_time]
196
+
197
+ end
198
+
199
+ #if do_sample or do_files
200
+ data.each do |d|
201
+ puts "Using file #{d[:file]}."
202
+
203
+ perf_load(d) if do_load
204
+ perf_dump(d) if do_dump
205
+ if do_load and do_dump
206
+ puts ">>> Ox is %0.1f faster than Marshal dumping and loading.\n\n" % [($mars_load_time + $mars_dump_time)/($ox_load_time + $ox_dump_time)] unless 0 == $mars_load_time
207
+ end
208
+
209
+ perf_read(d) if do_read
210
+ perf_write(d) if do_write
211
+
212
+ end
213
+ #end
@@ -39,8 +39,8 @@ class Jazz
39
39
  'hash' => @hash,
40
40
  }
41
41
  end
42
- def to_msgpack(out)
43
- out << MessagePack.pack(to_hash())
42
+ def to_msgpack(out='')
43
+ to_hash().to_msgpack(out)
44
44
  end
45
45
  end
46
46
 
@@ -50,8 +50,8 @@ class Jazz
50
50
  end
51
51
  alias as_json to_hash
52
52
 
53
- def to_msgpack(out)
54
- out << MessagePack.pack(to_hash())
53
+ def to_msgpack(out='')
54
+ to_hash().to_msgpack(out)
55
55
  end
56
56
 
57
57
  def self.json_create(h)
@@ -300,6 +300,7 @@ class Juice < ::Test::Unit::TestCase
300
300
  begin
301
301
  json = Oj.dump({ 1 => true, 0 => false }, :mode => :compat)
302
302
  rescue Exception => e
303
+ assert(e.message.include?('Fixnum'))
303
304
  assert(true)
304
305
  end
305
306
  end
metadata CHANGED
@@ -1,24 +1,27 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: oj
3
- version: !ruby/object:Gem::Version
4
- version: 1.2.8
3
+ version: !ruby/object:Gem::Version
5
4
  prerelease:
5
+ version: 1.2.9
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Peter Ohler
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-03 00:00:00.000000000 Z
12
+
13
+ date: 2012-05-29 00:00:00 Z
13
14
  dependencies: []
14
- description: ! 'The fastest JSON parser and object serializer. '
15
+
16
+ description: "The fastest JSON parser and object serializer. "
15
17
  email: peter@ohler.com
16
18
  executables: []
17
- extensions:
19
+
20
+ extensions:
18
21
  - ext/oj/extconf.rb
19
- extra_rdoc_files:
22
+ extra_rdoc_files:
20
23
  - README.md
21
- files:
24
+ files:
22
25
  - lib/oj/bag.rb
23
26
  - lib/oj/version.rb
24
27
  - lib/oj.rb
@@ -32,12 +35,13 @@ files:
32
35
  - ext/oj/fast.c
33
36
  - ext/oj/load.c
34
37
  - ext/oj/oj.c
35
- - test/boo.rb
36
38
  - test/files.rb
37
- - test/foo.rb
38
39
  - test/perf.rb
40
+ - test/perf1.rb
41
+ - test/perf2.rb
39
42
  - test/perf_fast.rb
40
43
  - test/perf_obj.rb
44
+ - test/perf_obj_old.rb
41
45
  - test/perf_simple.rb
42
46
  - test/perf_strict.rb
43
47
  - test/sample/change.rb
@@ -57,34 +61,37 @@ files:
57
61
  - test/test_fast.rb
58
62
  - test/test_mimic.rb
59
63
  - test/tests.rb
60
- - test/where.rb
61
64
  - LICENSE
62
65
  - README.md
63
66
  homepage: http://www.ohler.com/oj
64
67
  licenses: []
68
+
65
69
  post_install_message:
66
- rdoc_options:
70
+ rdoc_options:
67
71
  - --main
68
72
  - README.md
69
- require_paths:
73
+ require_paths:
70
74
  - lib
71
75
  - ext
72
- required_ruby_version: !ruby/object:Gem::Requirement
76
+ required_ruby_version: !ruby/object:Gem::Requirement
73
77
  none: false
74
- requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: "0"
82
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
83
  none: false
80
- requirements:
81
- - - ! '>='
82
- - !ruby/object:Gem::Version
83
- version: '0'
84
+ requirements:
85
+ - - ">="
86
+ - !ruby/object:Gem::Version
87
+ version: "0"
84
88
  requirements: []
89
+
85
90
  rubyforge_project: oj
86
91
  rubygems_version: 1.8.23
87
92
  signing_key:
88
93
  specification_version: 3
89
94
  summary: A fast JSON parser and serializer.
90
95
  test_files: []
96
+
97
+ has_rdoc: true
@@ -1,26 +0,0 @@
1
- #!/usr/bin/env ruby -wW1
2
- # encoding: UTF-8
3
-
4
- $: << File.join(File.dirname(__FILE__), "../lib")
5
- $: << File.join(File.dirname(__FILE__), "../ext")
6
-
7
- require 'yajl'
8
- require 'oj'
9
-
10
- iter = 100
11
- s = File.read("boo.json")
12
- start = Time.now
13
- iter.times do
14
- Oj.load(s)
15
- end
16
- oj_dt = Time.now - start
17
- puts "%d Oj.load()s in %0.3f seconds or %0.1f loads/second" % [iter, oj_dt, iter/oj_dt]
18
-
19
- start = Time.now
20
- iter.times do
21
- Yajl::Parser.parse(s)
22
- end
23
- yajl_dt = Time.now - start
24
- puts "%d Yajl::Parser.parse()s in %0.3f seconds or %0.1f parsed/second" % [iter, yajl_dt, iter/yajl_dt]
25
-
26
- puts "Oj is %0.1f times faster than YAJL" % [yajl_dt / oj_dt]
@@ -1,54 +0,0 @@
1
- #!/usr/bin/env ruby -wW1
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 = 1000000
15
-
16
- opts = OptionParser.new
17
- opts.on("-v", "verbose") { $verbose = true }
18
- opts.on("-c", "--count [Int]", Integer, "iterations") { |i| $iter = i }
19
- opts.on("-i", "--indent [Int]", Integer, "indentation") { |i| $indent = i }
20
- opts.on("-h", "--help", "Show this display") { puts opts; Process.exit!(0) }
21
- files = opts.parse(ARGV)
22
-
23
- $obj = {
24
- 'a' => 'Alpha', # string
25
- 'b' => true, # boolean
26
- 'c' => 12345, # number
27
- 'd' => [ true, [false, [12345, nil], 3.967, ['something', false], nil]], # mix it up array
28
- 'e' => { 'one' => 1, 'two' => 2 }, # hash
29
- 'f' => nil, # nil
30
- 'g' => 12345678901234567890123456789, # big number
31
- 'h' => { 'a' => { 'b' => { 'c' => { 'd' => {'e' => { 'f' => { 'g' => nil }}}}}}}, # deep hash, not that deep
32
- 'i' => [[[[[[[nil]]]]]]] # deep array, again, not that deep
33
- }
34
-
35
- Oj.default_options = { :indent => $indent, :mode => :strict }
36
-
37
- $json = Oj.dump($obj)
38
-
39
- if $verbose
40
- puts "json:\n#{$json}\n"
41
- end
42
-
43
- puts '-' * 80
44
- puts "Parse Performance"
45
- Oj::Fast.open($json) do |fast|
46
- fast.move('/d/2/4/2')
47
- puts fast.where2?
48
- puts fast.where?
49
- perf = Perf.new()
50
- perf.add('Oj:fast', 'where') { fast.where? }
51
- perf.add('Oj:fast2', 'where2') { fast.where2? }
52
- perf.run($iter)
53
- end
54
- puts