From 234dd4ee37f4464fc8762f2bf6b031e678bd8979 Mon Sep 17 00:00:00 2001
From: Rhys Arkins <rhys@arkins.net>
Date: Tue, 14 Jan 2020 16:03:07 +0100
Subject: [PATCH] fix(bundler): handle precision changes

---
 lib/versioning/ruby/index.ts           | 8 +++-----
 lib/versioning/ruby/strategies/bump.ts | 2 --
 test/versioning/ruby.spec.ts           | 8 ++++++++
 3 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/lib/versioning/ruby/index.ts b/lib/versioning/ruby/index.ts
index 49fc24fee7..6778528869 100644
--- a/lib/versioning/ruby/index.ts
+++ b/lib/versioning/ruby/index.ts
@@ -73,6 +73,9 @@ const getNewValue = (
   toVersion: string
 ): string => {
   let result = null;
+  if (isVersion(currentValue)) {
+    return currentValue.startsWith('v') ? 'v' + toVersion : toVersion;
+  }
   switch (rangeStrategy) {
     case 'pin':
       result = pin({ to: vtrim(toVersion) });
@@ -87,11 +90,6 @@ const getNewValue = (
     default:
       logger.warn(`Unsupported strategy ${rangeStrategy}`);
   }
-
-  if (currentValue !== vtrim(currentValue) && isSingleVersion(result)) {
-    result = `v${result}`;
-  }
-
   return result;
 };
 
diff --git a/lib/versioning/ruby/strategies/bump.ts b/lib/versioning/ruby/strategies/bump.ts
index ec24cb3f01..acbac49726 100644
--- a/lib/versioning/ruby/strategies/bump.ts
+++ b/lib/versioning/ruby/strategies/bump.ts
@@ -8,8 +8,6 @@ export default ({ range, to }: { range: string; to: string }): string => {
   const ranges = range.split(',').map(parseRange);
   const results = ranges.map(({ operator, version: ver, delimiter }) => {
     switch (operator) {
-      case null:
-        return to;
       case GT:
         return lte(to, ver)
           ? `${GT}${delimiter}${ver}`
diff --git a/test/versioning/ruby.spec.ts b/test/versioning/ruby.spec.ts
index e665f80eb5..d725c6af18 100644
--- a/test/versioning/ruby.spec.ts
+++ b/test/versioning/ruby.spec.ts
@@ -418,6 +418,14 @@ describe('semverRuby', () => {
         )
       ).toEqual('~> 5.3.0, >= 5.3.1');
     });
+    it('handles change in precision', () => {
+      expect(
+        semverRuby.getNewValue('4.2.0', 'replace', '4.2.0', '4.2.5.1')
+      ).toEqual('4.2.5.1');
+      expect(
+        semverRuby.getNewValue('4.2.5.1', 'replace', '4.2.5.1', '4.3.0')
+      ).toEqual('4.3.0');
+    });
 
     it('returns correct version for replace strategy', () => {
       [
-- 
GitLab