I would still like this proposal to formalise having an optional PATCH in there though:
BIGRELEASE.MAJOR.MINOR[.PATCH]
That way one can lock the version to get only actual bugfixes, with no other change: gem 'foo', '~> 2.3.4.5'
would get 2.3.4.5 and up but none† of 2.3.5, and it's up to the project to decide if they want to do any release like that.† excluding any 2.3.5 prerelease as well