diff --git a/lib/taurus/xml.rb b/lib/taurus/xml.rb index 112d850..a3bff8a 100644 --- a/lib/taurus/xml.rb +++ b/lib/taurus/xml.rb @@ -21,6 +21,16 @@ module XML autoload :SAX, "taurus/xml/sax" require "taurus/xml/c14n" # module-level helper, eager load + # Nokogiri-style top-level entry points (Nokogiri::XML(...) / + # Nokogiri::XML.parse). Delegates to Document.parse. + def self.parse(xml_or_io) + Document.parse(xml_or_io) + end + + def self.parse_file(path) + Document.parse_file(path) + end + class Error < StandardError; end class ParseError < Error; end class XPathError < Error; end diff --git a/spec/xml/document_spec.rb b/spec/xml/document_spec.rb index 6857264..3026c1d 100644 --- a/spec/xml/document_spec.rb +++ b/spec/xml/document_spec.rb @@ -173,3 +173,28 @@ end end end + +RSpec.describe "Taurus::XML module entry points" do + it "parses via Taurus::XML.parse" do + doc = Taurus::XML.parse("") + expect(doc).to be_a(Taurus::XML::Document) + expect(doc.root.name).to eq("root") + expect(doc.root.first_element_child.name).to eq("child") + end + + it "parses an IO via Taurus::XML.parse" do + require "stringio" + doc = Taurus::XML.parse(StringIO.new("")) + expect(doc.root.name).to eq("root") + end + + it "parses a file via Taurus::XML.parse_file" do + require "tmpdir" + Dir.mktmpdir do |dir| + path = File.join(dir, "t.xml") + File.write(path, "data") + doc = Taurus::XML.parse_file(path) + expect(doc.root.content).to eq("data") + end + end +end