aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2009-03-09 12:46:06 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2009-03-09 13:00:57 -0700
commit87d82ef76e88d7ce97cfc09151b677b552f2840a (patch)
tree5ce0f6147cb0da934e658b181546a72b473021b2 /activesupport/lib
parent146511e0181a8c6703dcff7b5236d81b64841dd5 (diff)
downloadrails-87d82ef76e88d7ce97cfc09151b677b552f2840a.tar.gz
rails-87d82ef76e88d7ce97cfc09151b677b552f2840a.tar.bz2
rails-87d82ef76e88d7ce97cfc09151b677b552f2840a.zip
Require libxml-ruby 0.9.4 or 0.9.7 pending a segfault bugfix for 1.0.
Delegate parsing to a switchable backend.
Diffstat (limited to 'activesupport/lib')
-rw-r--r--activesupport/lib/active_support/xml_mini.rb26
-rw-r--r--activesupport/lib/active_support/xml_mini/libxml.rb14
-rw-r--r--activesupport/lib/active_support/xml_mini/rexml.rb6
3 files changed, 23 insertions, 23 deletions
diff --git a/activesupport/lib/active_support/xml_mini.rb b/activesupport/lib/active_support/xml_mini.rb
index 8ae8e7cefe..d2a882b685 100644
--- a/activesupport/lib/active_support/xml_mini.rb
+++ b/activesupport/lib/active_support/xml_mini.rb
@@ -1,21 +1,19 @@
-# = XmlMini
module ActiveSupport
+ # = XmlMini
module XmlMini
extend self
+ delegate :parse, :to => :@backend
- CONTENT_KEY = '__content__'.freeze
-
- # Hook the correct parser into XmlMini
- def hook_parser
- begin
- require 'xml/libxml' unless defined? LibXML
- require "active_support/xml_mini/libxml.rb"
- rescue MissingSourceFile => e
- require "active_support/xml_mini/rexml.rb"
- end
+ def backend=(name)
+ require "active_support/xml_mini/#{name.to_s.downcase}.rb"
+ @backend = ActiveSupport.const_get("XmlMini_#{name}")
end
+ end
- hook_parser
-
+ begin
+ gem 'libxml-ruby', '=0.9.4', '=0.9.7'
+ XmlMini.backend = 'LibXML'
+ rescue Gem::LoadError
+ XmlMini.backend = 'REXML'
end
-end \ No newline at end of file
+end
diff --git a/activesupport/lib/active_support/xml_mini/libxml.rb b/activesupport/lib/active_support/xml_mini/libxml.rb
index dd271dc587..e1549d8c58 100644
--- a/activesupport/lib/active_support/xml_mini/libxml.rb
+++ b/activesupport/lib/active_support/xml_mini/libxml.rb
@@ -1,19 +1,19 @@
# = XML Mini Libxml implementation
module ActiveSupport
- module XmlMini
+ module XmlMini_LibXML #:nodoc:
extend self
# Parse an XML Document string into a simple hash using libxml.
# string::
# XML Document string to parse
def parse(string)
- require 'xml/libxml' unless defined? LibXML
-
- string.strip!
XML.default_keep_blanks = false
- return {} if string.blank?
- return XML::Parser.string(string).parse.to_hash
+ if string.blank?
+ {}
+ else
+ XML::Parser.string(string.strip).parse.to_hash
+ end
end
end
@@ -128,4 +128,4 @@ module XML
end
XML::Document.send(:include, XML::Conversions::Document)
-XML::Node.send(:include, XML::Conversions::Node) \ No newline at end of file
+XML::Node.send(:include, XML::Conversions::Node)
diff --git a/activesupport/lib/active_support/xml_mini/rexml.rb b/activesupport/lib/active_support/xml_mini/rexml.rb
index 655eff168c..a8fdeca967 100644
--- a/activesupport/lib/active_support/xml_mini/rexml.rb
+++ b/activesupport/lib/active_support/xml_mini/rexml.rb
@@ -1,8 +1,10 @@
# = XmlMini ReXML implementation
module ActiveSupport
- module XmlMini
+ module XmlMini_REXML #:nodoc:
extend self
+ CONTENT_KEY = '__content__'.freeze
+
# Parse an XML Document string into a simple hash
#
# Same as XmlSimple::xml_in but doesn't shoot itself in the foot,
@@ -103,4 +105,4 @@ module ActiveSupport
element.texts.join.blank?
end
end
-end \ No newline at end of file
+end