Skip to main content
  1. Projects/

Soap4R-ng

Repo: github.com/rubyjedi/soap4r

Back in the early 2010s, a lot of enterprise Ruby on Rails apps were neck-deep in SOAP integrations — insurance carriers, healthcare systems, EDI pipelines. The de-facto library for that was soap4r. And then it went unmaintained right as Ruby was moving past 1.8.

That left a lot of production systems in a bad spot.

What I Did
#

Took the fork, made it work again, and kept it working across Ruby versions. Specifically:

  • Ruby 1.8 → 4.0+ compatibility
  • Swapped in Ox and Nokogiri as faster, lower-memory XML parser options (the original parser was not great)
  • Maintained backward API compatibility so existing code could drop it in without changes

Status
#

Not as quiet as I said last time. This thing used to run on Travis CI with a Code Climate badge riding shotgun, back when that combo was just what Ruby gems did — and like a lot of OSS projects from that era, both badges quietly went stale once Travis’s free tier dried up and Code Climate wound down free OSS checks. That’s not the tests lying; that’s the infrastructure they ran on ceasing to be a thing. 2.1.0 just shipped — the first real release this project’s ever had — and it’s the CI rebuild that badge should’ve been replaced with years ago: the test suite now passes, for real, on every Ruby version the gem claims to support — Ruby 1.8.7 all the way to 4.0.5, plus JRuby — minus a small, named list of non-bug exceptions that are allowed to fail on purpose instead of being quietly ignored. I test both locally and in CI on GitHub Actions, and the point of this release was making sure the two actually agree: official Docker Hub Ruby images (yes, even for JRuby) for anything current, custom Dockerfiles for the legacy end where the official images either don’t exist or aren’t pullable anymore.

Chasing that down turned up two bugs that had been quietly wrecking CI for who knows how long — a teardown race that could leak a bound port and hang the whole run, and a test that spawned its server through a shell hop so waitpid could never find it and just slept 5 seconds every single time. Neither was a SOAP bug. Both were the kind of thing you only find when you stop tolerating “eh, just rerun it.”

The Ruby SOAP era is still mostly over. But if you’re one of the few people still running this gem in production, it now works properly on the Ruby you’re actually running — old or new.


Full technical write-up — the race condition, the shell-hop bug, all of it — over on my professional portfolio at rubyjedi.com.