Skip to content
Cezary Baginski edited this page May 3, 2016 · 1 revision

FAQ:

Why such a project?

Lots of reasons. Mostly to maintain an accurate, specific and definite list of Rubies supported by a gem.

The biggest benefit is that you declare all your supported Rubies in one place: .travis.yml.

It broke my build!

Yes. That's what it's for: to prevent installing an unsupported/conflicting version of Ruby. A broken build is a good thing, because it means: "we avoided a catastrophe in production!".

Solution: Upgrade your Ruby to a version that's supported, bug-free and most-importantly: secure. It's much better to have a dependency that doesn't install than having a failing tests and not knowing why.

Also - don't depend on Travis builds as proof a gem works. It's just a "fail-safe".

But I can't upgrade Ruby because of X.

Pressure the people responsible. It's irresponsible to be using vulnerable rubies.

But Ruby doesn't follow SemVer.

Currently, it's close enough for Ruby-only projects. You can also argue that every bugfix breaks compatibility, because it can introduce changes someone else relied on.

Why is only Ruby >= 2.2 supported?

Because Ruby < 2.2 is not longer supported. "Security patches" is not the same as support. (Because "support" means "fixing bugs", and not just "security patches").

But why am I forced to upgrade my Ruby?

You're not. Just like you can decide not to upgrade the gems and dependencies which require a newer Ruby. You can also ask for backports. (Just make sure to provide compelling use cases, and not just "my build broke").

Were there no other alternatives?

Not at the time of writing. RubyDep was extracted from a project which declared support for Ruby 1.9.3, but actually didn't support it. Luckly, only builds broke.

Bundler v1.12 can maybe install older versions of gems if there's a Ruby version mismatch - but this isn't extensive or reliable.

Can you remove the dependency on this gem in library X?

Only if there's are really convincing use case or serious breakage. (Failing Travis builds doesn't count as breakage). Otherwise this is for making sure only Rubies supported by a given library are used and properly declared. As a bonus, users are warned about bugs and vulnerabilities in their Rubies. This can be turned off with an environment variable.

So if you have an up-to-date Ruby, this gem does nothing at Runtime.

What if I have more questions?

Just open an issue to ask.