diff --git a/lib/versioning/ruby/strategies/replace.js b/lib/versioning/ruby/strategies/replace.js index 02bffe56640a140c09479c02d44ba497426662b7..091013e39650a83479af173db2c699576a764651 100644 --- a/lib/versioning/ruby/strategies/replace.js +++ b/lib/versioning/ruby/strategies/replace.js @@ -1,5 +1,15 @@ const { satisfies } = require('@snyk/ruby-semver'); const bump = require('./bump'); -module.exports = ({ to, range }) => - satisfies(to, range) ? range : bump({ to, range }); +module.exports = ({ to, range }) => { + if (satisfies(to, range)) { + return range; + } + const lastPart = range + .split(',') + .map(part => part.trim()) + .pop(); + const newLastPart = bump({ to, range: lastPart }); + // TODO: match precision + return range.replace(lastPart, newLastPart); +}; diff --git a/test/versioning/ruby.spec.js b/test/versioning/ruby.spec.js index 4998db47ebde06790ed829291e0e18ea8cb4c122..bf227b9f3e33859c41e95e134df2fcdd9cfdcb86 100644 --- a/test/versioning/ruby.spec.js +++ b/test/versioning/ruby.spec.js @@ -408,6 +408,13 @@ describe('semverRuby', () => { ['~> 1.2.0', '~> 1.0.3', 'replace', '1.0.0', '1.2.3'], ['~> 1.0.3', '~> 1.0.3', 'replace', '1.0.0', '1.0.4'], ['~> 4.7, >= 4.7.4', '~> 4.7, >= 4.7.4', 'replace', '1.0.0', '4.7.9'], + [ + '>= 2.0.0, <= 2.20.0', + '>= 2.0.0, <= 2.15', + 'replace', + '2.15.0', + '2.20.0', + ], ].forEach(([expected, ...params]) => { expect(semverRuby.getNewValue(...params)).toEqual(expected); });