From 34c8ebe4861a6e1c92a4491212eff0cc22506ff5 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Sun, 13 Jan 2019 11:06:28 +0100
Subject: [PATCH] fix(ruby): replace complex ranges

---
 lib/versioning/ruby/strategies/replace.js | 14 ++++++++++++--
 test/versioning/ruby.spec.js              |  7 +++++++
 2 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/lib/versioning/ruby/strategies/replace.js b/lib/versioning/ruby/strategies/replace.js
index 02bffe5664..091013e396 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 4998db47eb..bf227b9f3e 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);
       });
-- 
GitLab