Skip to content

Commit

Permalink
enable *real* IO parsing for the libxml, nokogiri and rexml backends [#…
Browse files Browse the repository at this point in the history
…2659 state:resolved]

Signed-off-by: Joshua Peek <josh@joshpeek.com>
  • Loading branch information
brianmario authored and josh committed Jun 9, 2009
1 parent a94e7d7 commit 69bc204
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 16 deletions.
14 changes: 8 additions & 6 deletions activesupport/lib/active_support/xml_mini/libxml.rb
Expand Up @@ -9,16 +9,18 @@ module XmlMini_LibXML #:nodoc:
# 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

LibXML::XML.default_keep_blanks = false

if data.blank?

char = data.getc
if char.nil?
{}
else
LibXML::XML::Parser.string(data.strip).parse.to_hash
data.ungetc(char)
LibXML::XML::Parser.io(data).parse.to_hash
end
end

Expand Down
10 changes: 6 additions & 4 deletions activesupport/lib/active_support/xml_mini/nokogiri.rb
Expand Up @@ -9,13 +9,15 @@ module XmlMini_Nokogiri #:nodoc:
# 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

if data.blank?

char = data.getc
if char.nil?
{}
else
data.ungetc(char)
doc = Nokogiri::XML(data)
raise doc.errors.first if doc.errors.length > 0
doc.to_hash
Expand Down
18 changes: 12 additions & 6 deletions activesupport/lib/active_support/xml_mini/rexml.rb
Expand Up @@ -15,13 +15,19 @@ module XmlMini_REXML #:nodoc:
# 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
Expand Down

0 comments on commit 69bc204

Please sign in to comment.