From 9a5138d68384d4ddb8e62333c728a103ea5bf56f Mon Sep 17 00:00:00 2001 From: Ronald Tse Date: Fri, 21 Aug 2026 07:22:44 +0800 Subject: [PATCH] Add Taurus::XML.parse / parse_file module entry points The README documents Taurus::XML.parse and Taurus::XML.parse_file, but only Taurus::XML::Document.parse existed -- code following the README raised NoMethodError. This surfaced when the serialbench adapter probed availability with Taurus::XML.parse(""). Adds Nokogiri-style module-level delegates (Nokogiri::XML(...)) to Document.parse / Document.parse_file, with specs for string, IO, and file input. --- lib/taurus/xml.rb | 10 ++++++++++ spec/xml/document_spec.rb | 25 +++++++++++++++++++++++++ 2 files changed, 35 insertions(+) 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