Permalink
Browse files

started project

  • Loading branch information...
0 parents commit ddb03523bc47fac83799f0041e80912bc57ea626 Peter Ohler committed Feb 9, 2011
Showing with 139 additions and 0 deletions.
  1. +27 −0 LICENSE
  2. +85 −0 README
  3. +27 −0 ox.gemspec
27 LICENSE
@@ -0,0 +1,27 @@
+Copyright (c) 2011, Peter Ohler
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ - Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+
+ - Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+
+ - Neither the name of Peter Ohler nor the names of its contributors may be
+ used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
85 README
@@ -0,0 +1,85 @@
+= Ox: A fast XML parser and Object marshaller.
+
+*GitHub* *repo*: http://github.com/tbd
+
+=== Description:
+
+Optimized XML (Ox), as the name implies was written to provide speed optimized
+XML handling. It was designed to be an alternative to Nokogiri in generic XML
+parsing and as an alternative to Marshal for Object serialization.
+
+Nokogiri relies on libXml while Ox is self contained. Ox uses nothing other
+than standard C libraries so version issues with libXml are not an issue.
+
+Marshal uses a binary format for serializing Objects. That binary format
+changes with releases making Marshal dumped Object incompatible between some
+versions. The use of a binary format make debugging message streams or file
+contents next to impossible unless the same version of Ruby and only Ruby is
+used for inspecting the serialize Object. Ox on the other hand uses human
+readable XML.
+
+It is possible to write an XML serialization gem with Nokogiri but writing
+such a package in Ruby results in a module significantly slower than
+Marshal. This is what triggered the start of Ox development.
+
+Ox handles XML documents in two ways. It is a generic XML parser and writer as
+well as a fast Object / XML marshaller. Ox was written for speed as a
+replacement for Nokogiri and for Marshal.
+
+As an XML parser it is 2 or more times faster than Nokogiri and as a generic
+XML writer it is as much as 20 times faster than Nokogiri. Of course different
+files may result in slightly different times.
+
+As an Object serializer Ox is up to 6 times faster than the standard Ruby
+Marshal.dump() and up to 3 times faster than Marshal.load().
+
+
+=== Object Dump Sample:
+
+ require 'ox'
+
+ class Sample
+ attr_accessor :a, :b, :c
+
+ def initialize(a, b, c)
+ @a = a
+ @b = b
+ @c = c
+ end
+ end
+
+ # Create Object
+ obj = Sample.new(1, "bee", ['x', :y, 7.0])
+ # Now dump the Object to an XML String.
+ xml = Ox.dump(obj)
+ # Convert the object back into a Sample Object.
+ obj2 = Ox.parse_obj(xml)
+
+=== Generic XML Writing and Parsing:
+
+ require 'ox'
+
+ doc = Ox::Document.new(:version => '1.0')
+
+ top = Ox::Element.new('top')
+ top[:name] = 'sample'
+ doc << top
+
+ mid = Ox::Element.new('middle')
+ mid[:name] = 'second'
+ top << mid
+
+ bot = Ox::Element.new('bottom')
+ bot[:name] = 'third'
+ mid << bot
+
+ xml = Ox.dump(doc)
+ puts xml
+ doc2 = Ox.parse(xml)
+ puts "Same? #{doc == doc2}"
+
+
+=== To Do (future release)
+
+ * Support looped object references.
+ * Support UTF-8
@@ -0,0 +1,27 @@
+
+require 'date'
+
+Gem::Specification.new do |s|
+ s.name = "ox"
+ s.version = '1.0.0'
+ # s.version = ::Ox::VERSION
+ s.authors = "Peter Ohler"
+ s.date = Date.today.to_s
+ s.email = "peter@ohler.com"
+ s.homepage = "http://www.ohler.com/ox"
+ s.summary = "A fast XML parser and object serializer."
+ s.description = "A fast XML parser and object serializer that uses only standard C lib."
+
+ s.files = Dir["{lib,ext,test}/**/*.{rb,h,c,graffle}"] + ['LICENSE', 'README']
+
+ s.extensions = ["ext/ox/extconf.rb"]
+ # s.executables = []
+
+ s.require_paths = ["lib", "ext"]
+
+ s.has_rdoc = true
+ s.extra_rdoc_files = ['README']
+ s.rdoc_options = ['--main', 'README']
+
+ s.rubyforge_project = 'ox' # dummy to keep the build quiet
+end

0 comments on commit ddb0352

Please sign in to comment.