Add pluggable curb/Faraday HTTP client backends - #33
Merged
Conversation
Makes the HTTP client backend pluggable (SOAP4R_HTTP_CLIENTS, mirroring the existing SOAP4R_PARSERS mechanism), adding curb and Faraday (typhoeus adapter) as opt-in backends alongside the existing httpclient/net_http. Broadens test coverage that used to be httpclient-only (backend-neutral wiredump parsing, SSL config coverage across all SSL-capable backends), fixing several real bugs surfaced in the process (Faraday :ciphers SSLOptions crash, URI.parse vs. already-a-URI object, curb Curl::Easy#ciphers= not existing, Tempfile finalizer bugs, Ruby 1.8.7 syntax regressions). Gates curb (>= 2.4, libcurl version requirement) and Faraday (>= 2.6, an enhancement for modern Rubies rather than a legacy capability -- older Faraday releases don't match this project's adapter assumptions) to their real floors, with CI skipping cleanly below those floors instead of hard-failing. Fixes a latent CI bug where `bundle config set with "..."` (Bundler 2.x-only syntax) silently no-opped on the Bundler 1.17.3 every Ruby below 3.2 falls back to -- curb/faraday were never actually being exercised in CI on those versions. Replaced with BUNDLE_WITH. Corrects an Ox dependency issue found via full-matrix regression testing: Ruby 2.2.x-2.6.x resolve Ox 2.14.14 unconstrained (Ox's own gemspec added a hard Ruby >= 2.7 floor starting at 2.14.15), and 2.14.14 segfaults inside Ox.sax_parse's :convert_special => true path on complex documents. htmlentities avoids that path entirely and is restored as a required dependency for that range; Ruby 1.9.3-2.1.x pins Ox exactly to 2.14.6 (decodes entities natively, no crash); Ruby 1.8.7 stays on the older Ox 2.4.5 (2.14.6 fails to build there). Scopes curb's already-documented libcurl/OpenSSL SSL exception on Ruby 2.4.10/2.5.9 to continue-on-error on just that step, instead of failing the whole job. Adds CHANGELOG.md holding the full investigation detail (version-by- version Ox testing, Faraday's architecture mismatch, the BUNDLE_WITH bug, CI's Docker-per-version architecture, full known-test-exceptions writeup) that had accumulated as long inline comments in Gemfile, ci.yml, and README.md -- those three files now carry short pointers instead. Full regression matrix (all 5 XML parsers x all applicable HTTP backends) re-run clean across 1.8.7, 1.9.3, 2.0.0, 2.1.10, 2.2.10, 2.3.8, 2.6.10 -- all green except 1.8.7, which shows only its pre-existing, already-documented exceptions.
This was referenced Jul 15, 2026
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Replaces #32 — same content, rebuilt as a single clean commit (squashed and rebased onto current master) rather than continuing that branch's history.
Summary
SOAP4R_HTTP_CLIENTS, mirroring the existingSOAP4R_PARSERSmechanism), adding curb and Faraday (typhoeus adapter) as opt-in backends alongside the existing httpclient/net_http.:ciphersSSLOptions crash,URI.parsevs. already-a-URIobject, curbCurl::Easy#ciphers=not existing, Tempfile finalizer bugs, Ruby 1.8.7 syntax regressions).>= 2.4, libcurl version requirement) and Faraday (>= 2.6, an enhancement for modern Rubies rather than a legacy capability — older Faraday releases don't match this project's adapter assumptions) to their real floors, with CI skipping cleanly below those floors instead of hard-failing.bundle config set with "..."(Bundler 2.x-only syntax) silently no-opped on the Bundler 1.17.3 every Ruby below 3.2 falls back to — curb/faraday were never actually being exercised in CI on those versions. Replaced withBUNDLE_WITH.Ruby >= 2.7floor starting at 2.14.15), and 2.14.14 segfaults insideOx.sax_parse's:convert_special => truepath on complex documents.htmlentitiesavoids that path entirely and is restored as a required dependency for that range; Ruby 1.9.3–2.1.x pins Ox exactly to 2.14.6 (decodes entities natively, no crash); Ruby 1.8.7 stays on the older Ox 2.4.5 (2.14.6 fails to build there).CHANGELOG.mdholding the full investigation detail (version-by-version Ox testing, Faraday's architecture mismatch, theBUNDLE_WITHbug, CI's Docker-per-version architecture, full known-test-exceptions writeup) that had accumulated as long inline comments inGemfile,ci.yml, andREADME.md— those three files now carry short pointers instead.continue-on-erroron just that step, instead of failing the whole job.Test plan
ci.ymlvalidated as syntactically correct YAML;Gemfile/lib/xsd/xmlparser/oxparser.rbvalidated as syntactically correct Ruby.