aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/xml_mini/rexml.rb
diff options
context:
space:
mode:
authorBrian Lopez <seniorlopez@gmail.com>2009-06-09 09:01:50 -0500
committerJoshua Peek <josh@joshpeek.com>2009-06-09 09:01:50 -0500
commit69bc2043f93890048e415dd7c5f1feba5a20d145 (patch)
tree619404d1d54a50e44a7b2642ece47e2f2a6c17b5 /activesupport/lib/active_support/xml_mini/rexml.rb
parenta94e7d7897a300a95d5d5a00c5efc573b42bcb58 (diff)
downloadrails-69bc2043f93890048e415dd7c5f1feba5a20d145.tar.gz
rails-69bc2043f93890048e415dd7c5f1feba5a20d145.tar.bz2
rails-69bc2043f93890048e415dd7c5f1feba5a20d145.zip
enable *real* IO parsing for the libxml, nokogiri and rexml backends [#2659 state:resolved]
Signed-off-by: Joshua Peek <josh@joshpeek.com>
Diffstat (limited to 'activesupport/lib/active_support/xml_mini/rexml.rb')
-rw-r--r--activesupport/lib/active_support/xml_mini/rexml.rb18
1 files changed, 12 insertions, 6 deletions
diff --git a/activesupport/lib/active_support/xml_mini/rexml.rb b/activesupport/lib/active_support/xml_mini/rexml.rb
index 1184d2d6c9..aa2461535b 100644
--- a/activesupport/lib/active_support/xml_mini/rexml.rb
+++ b/activesupport/lib/active_support/xml_mini/rexml.rb
@@ -15,13 +15,19 @@ module ActiveSupport
# data::
# XML Document string or IO to parse
def parse(data)
- if data.respond_to?(:read)
- data = data.read
+ if !data.respond_to?(:read)
+ data = StringIO.new(data || '')
+ end
+
+ char = data.getc
+ if char.nil?
+ {}
+ else
+ data.ungetc(char)
+ require 'rexml/document' unless defined?(REXML::Document)
+ doc = REXML::Document.new(data)
+ merge_element!({}, doc.root)
end
-
- require 'rexml/document' unless defined?(REXML::Document)
- doc = REXML::Document.new(data)
- merge_element!({}, doc.root)
end
private