ox 1.4.0 → 1.4.1

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

Potentially problematic release.


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

data/README.md CHANGED
@@ -26,10 +26,9 @@ A fast XML parser and Object marshaller as a Ruby gem.
26
26
 
27
27
  ## <a name="release">Release Notes</a>
28
28
 
29
- ### Release 1.4.0
29
+ ### Release 1.4.1
30
30
 
31
- - Fixed bug in parsing the xml instruction.
32
- - Added locate() method that provides simple and limited xpath like functionality.
31
+ - Empty CDATA buf found and fixed by adamvaughan on github
33
32
 
34
33
  ## <a name="description">Description</a>
35
34
 
data/ext/ox/sax.c CHANGED
@@ -451,7 +451,8 @@ read_cdata(SaxDrive dr) {
451
451
  char c;
452
452
  int end = 0;
453
453
 
454
- dr->str = dr->cur - 1; // mark the start
454
+ dr->cur--; // back up to the start in case the cdata is empty
455
+ dr->str = dr->cur; // mark the start
455
456
  while (1) {
456
457
  c = sax_drive_get(dr);
457
458
  if (']' == c) {
data/lib/ox/element.rb CHANGED
@@ -112,9 +112,7 @@ module Ox
112
112
  # @param [Array] path array of steps in a path
113
113
  # @param [Array] found matching nodes
114
114
  def alocate(path, found)
115
- #puts "*** locate_dig(#{path}, #{found})"
116
115
  step = path[0]
117
- #puts "*** #{step}"
118
116
  if step.start_with?('@') # attribute
119
117
  raise InvalidPath.new(path) unless 1 == path.size
120
118
  step = step[1..-1]
data/lib/ox/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Ox
3
3
  # Current version of the module.
4
- VERSION = '1.4.0'
4
+ VERSION = '1.4.1'
5
5
  end
data/test/bench.rb ADDED
@@ -0,0 +1,53 @@
1
+ # Message Pack vs similar utilities
2
+ # using ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-darwin10.8.0]
3
+ #
4
+ # Packing
5
+ # pack: message pack 0.142954
6
+ # pack: marshall 0.636924
7
+ # pack: json 3.001180
8
+ # pack: ox 0.108832
9
+ #
10
+ # Unpacking
11
+ # unpack: message pack 0.260064
12
+ # unpack: marshal 0.616197
13
+ # unpack: marshal 0.609927
14
+ # unpack: ox 0.287053
15
+
16
+ require 'msgpack'
17
+ require 'json'
18
+ require 'ox'
19
+
20
+ iter = 100000
21
+
22
+ duck = { 'sound' => 'quack', 'name' => 'Daffy', 'feet' => 2, 'wings' => true }
23
+ dude = { 'sound' => "I'm the dude!", 'name' => 'Lebowski', 'missing a rug' => true, 'missing money' => 1_000_000.00 }
24
+ stuff = { :string => "A string", :array => [true, 2, 'yes'], :hash => { :string => "not very deep" }}
25
+
26
+ def bench(title, iter, &blk)
27
+ start = Time.now
28
+ (1..iter).each { blk.call }
29
+ time = Time.now - start
30
+ puts "%-30s %10.6f" % [title, time]
31
+ end
32
+
33
+ def bench_all(title, iter, obj)
34
+ puts "\n#{title} Packing"
35
+ bench('pack: message pack', iter) { MessagePack.pack(obj) }
36
+ bench('pack: marshall', iter) { Marshal.dump(obj) }
37
+ bench('pack: json', iter) { JSON.dump(obj) }
38
+ bench('pack: ox', iter) { Ox.dump(obj) }
39
+
40
+ puts "\n#{title} Unpacking"
41
+ mp_obj = MessagePack.pack(obj)
42
+ bench('unpack: message pack', iter) { MessagePack.unpack(mp_obj) }
43
+ mars_obj = Marshal.dump(obj)
44
+ bench('unpack: marshal', iter) { Marshal.load(mars_obj) }
45
+ json_obj = JSON.dump(obj)
46
+ bench('unpack: json', iter) { JSON.parse(json_obj) }
47
+ ox_obj = Ox.dump(obj)
48
+ bench('unpack: ox', iter) { Ox.parse_obj(ox_obj) }
49
+ end
50
+
51
+ bench_all('duck', iter, duck)
52
+ bench_all('dude', iter, dude)
53
+ bench_all('stuff', iter, stuff)
data/test/perf_mars.rb CHANGED
@@ -50,7 +50,7 @@ data = {
50
50
  :Rational => ::Test::Ox::Wrap.new(),
51
51
  :Struct => ::Test::Ox::Wrap.new(),
52
52
  :Class => ::Test::Ox::Wrap.new(),
53
- :Object => ::Test::Ox::Wrap.new()
53
+ :Object => ::Test::Ox::Wrap.new(),
54
54
  }
55
55
 
56
56
  s = Struct.new('Zoo', :x, :y, :z)
@@ -74,7 +74,8 @@ s = Struct.new('Zoo', :x, :y, :z)
74
74
  data[:Object].values << ::Test::Ox::Wrap.new(i)
75
75
  end
76
76
 
77
- puts "type Ox Marshal ratio"
77
+ puts " load dump"
78
+ puts "type Ox Marshal ratio Ox Marshal ratio"
78
79
  data.each do |type,a|
79
80
  #xml = Ox.dump(a, :indent => -1, :xsd_date => true)
80
81
  xml = Ox.dump(a, :indent => -1)
@@ -85,13 +86,29 @@ data.each do |type,a|
85
86
  obj = Ox.load(xml, :mode => :object)
86
87
  #pp obj
87
88
  end
88
- ox_time = Time.now - start
89
+ ox_load_time = Time.now - start
89
90
 
90
91
  m = Marshal.dump(a)
91
92
  start = Time.now
92
93
  (1..it).each do
93
94
  obj = Marshal.load(m)
94
95
  end
95
- marshal_time = Time.now - start
96
- puts "%8s %6.3f %6.3f %0.1f" % [type.to_s, ox_time, marshal_time, marshal_time / ox_time]
96
+ mars_load_time = Time.now - start
97
+
98
+ obj = Ox.load(xml, :mode => :object)
99
+ start = Time.now
100
+ (1..it).each do
101
+ xml = Ox.dump(a, :indent => -1)
102
+ end
103
+ ox_dump_time = Time.now - start
104
+
105
+ start = Time.now
106
+ (1..it).each do
107
+ m = Marshal.dump(a)
108
+ end
109
+ mars_dump_time = Time.now - start
110
+
111
+ puts "%8s %6.3f %6.3f %0.1f %6.3f %6.3f %0.1f" % [type.to_s,
112
+ ox_load_time, mars_load_time, mars_load_time / ox_load_time,
113
+ ox_dump_time, mars_dump_time, mars_dump_time / ox_dump_time]
97
114
  end
data/test/sax_test.rb CHANGED
@@ -351,6 +351,24 @@ encoding = "UTF-8" ?>},
351
351
  [:error, "invalid format, cdata terminated unexpectedly", 5, 1]])
352
352
  end
353
353
 
354
+ def test_sax_cdata_empty
355
+ parse_compare(%{<?xml version="1.0"?>
356
+ <top>
357
+ <child><![CDATA[]]></child>
358
+ <child><![CDATA[This is CDATA.]]></child>
359
+ </top>
360
+ },
361
+ [[:instruct, 'xml'],
362
+ [:attr, :version, '1.0'],
363
+ [:start_element, :top],
364
+ [:start_element, :child],
365
+ [:cdata, ''],
366
+ [:end_element, :child],
367
+ [:start_element, :child],
368
+ [:cdata, 'This is CDATA.'],
369
+ [:end_element, :child],
370
+ [:end_element, :top]])
371
+ end
354
372
 
355
373
  def test_sax_mixed
356
374
  parse_compare(%{<?xml version="1.0"?>
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ox
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 1
7
- - 4
8
- - 0
9
- version: 1.4.0
4
+ prerelease:
5
+ version: 1.4.1
10
6
  platform: ruby
11
7
  authors:
12
8
  - Peter Ohler
@@ -14,7 +10,7 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2011-10-18 00:00:00 +09:00
13
+ date: 2011-11-16 00:00:00 +09:00
18
14
  default_executable:
19
15
  dependencies: []
20
16
 
@@ -54,6 +50,7 @@ files:
54
50
  - ext/ox/ox.c
55
51
  - ext/ox/parse.c
56
52
  - ext/ox/sax.c
53
+ - test/bench.rb
57
54
  - test/bug1.rb
58
55
  - test/bug2.rb
59
56
  - test/bug3.rb
@@ -106,21 +103,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
106
103
  requirements:
107
104
  - - ">="
108
105
  - !ruby/object:Gem::Version
109
- segments:
110
- - 0
111
106
  version: "0"
112
107
  required_rubygems_version: !ruby/object:Gem::Requirement
113
108
  none: false
114
109
  requirements:
115
110
  - - ">="
116
111
  - !ruby/object:Gem::Version
117
- segments:
118
- - 0
119
112
  version: "0"
120
113
  requirements: []
121
114
 
122
115
  rubyforge_project: ox
123
- rubygems_version: 1.3.7
116
+ rubygems_version: 1.6.2
124
117
  signing_key:
125
118
  specification_version: 3
126
119
  summary: A fast XML parser and object serializer.