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